<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" class="translated-ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>第24章存储的对象</title>
		<link rel="stylesheet" href="mvl.css" type="text/css">
		<meta name="generator" content="DocBook XSL Stylesheets + chunker.py v1.9.2">
		<link rel="start" href="index.html" title="{书名}">
		<link rel="up" href="" title="">
		<link rel="prev" href="partitioning.html" title="第23章分区">
		<link rel="next" href="information-schema.html" title="第25章INFORMATION_SCHEMA表">
		 
		<link type="text/css" rel="stylesheet" charset="UTF-8" href="https://translate.googleapis.com/translate_static/css/translateelement.css">
	</head>

	<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
		<div class="navheader">
			<table width="100%" summary="Navigation header">
				<tbody>
					<tr>
						<th colspan="3" align="center">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第24章存储的对象</font>
							</font>
						</th>
					</tr>
					<tr>
						<td width="20%" align="left"><a accesskey="p" href="partitioning.html">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">上一页</font>
								</font>
							</a>&nbsp;</td>
						<th width="60%" align="center"></th>
						<td width="20%" align="right">&nbsp;<a accesskey="n" href="information-schema.html">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">下一个</font>
								</font>
							</a></td>
					</tr>
				</tbody>
			</table>
			<hr>
		</div>
		<div class="chapter">
			<div class="titlepage">
				<div>
					<div>
						<h1 class="title"><a name="stored-objects"></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第24章存储的对象</font>
							</font>
						</h1>

					</div>

				</div>

			</div>
			<div class="toc">
				<p><b>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">目录</font>
						</font>
					</b></p>
				<dl class="toc"><dt><span class="section"><a href="stored-objects.html#stored-programs-defining">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.1定义存储的程序</font>
								</font>
							</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.2使用存储的例程</font>
								</font>
							</a></span></dt>
					<dd>
						<dl><dt><span class="section"><a href="stored-objects.html#stored-routines-syntax">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.2.1存储的例程语法</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines-privileges">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.2.2存储的例程和MySQL权限</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines-metadata">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.2.3存储的例程元数据</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines-last-insert-id">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.2.4存储过程，函数，触发器和LAST_INSERT_ID（）</font>
										</font>
									</a></span></dt></dl>
					</dd><dt><span class="section"><a href="stored-objects.html#triggers">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.3使用触发器</font>
								</font>
							</a></span></dt>
					<dd>
						<dl><dt><span class="section"><a href="stored-objects.html#trigger-syntax">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.3.1触发语法和示例</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#trigger-metadata">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.3.2触发元数据</font>
										</font>
									</a></span></dt></dl>
					</dd><dt><span class="section"><a href="stored-objects.html#event-scheduler">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.4使用事件调度程序</font>
								</font>
							</a></span></dt>
					<dd>
						<dl><dt><span class="section"><a href="stored-objects.html#events-overview">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.4.1事件调度程序概述</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-configuration">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.4.2事件调度程序配置</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-syntax">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.4.3事件语法</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-metadata">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.4.4事件元数据</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-status-info">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.4.5事件调度程序状态</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-privileges">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.4.6事件调度程序和MySQL权限</font>
										</font>
									</a></span></dt></dl>
					</dd><dt><span class="section"><a href="stored-objects.html#views">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.5使用视图</font>
								</font>
							</a></span></dt>
					<dd>
						<dl><dt><span class="section"><a href="stored-objects.html#view-syntax">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.5.1查看语法</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-algorithms">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.5.2视图处理算法</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-updatability">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.5.3可更新和可插入的视图</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-check-option">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.5.4带有检查选项的视图子句</font>
										</font>
									</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-metadata">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">24.5.5查看元数据</font>
										</font>
									</a></span></dt></dl>
					</dd><dt><span class="section"><a href="stored-objects.html#stored-objects-security">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.6存储对象访问控制</font>
								</font>
							</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-programs-logging">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.7存储程序二进制日志</font>
								</font>
							</a></span></dt>
				</dl>
			</div>
			<a class="indexterm" name="idm140091572128832"></a><a class="indexterm" name="idm140091572127760"></a><a class="indexterm"
			 name="idm140091572126688"></a><a class="indexterm" name="idm140091572125616"></a><a class="indexterm" name="idm140091572124128"></a><a
			 class="indexterm" name="idm140091572122640"></a><a class="indexterm" name="idm140091572121152"></a><a class="indexterm"
			 name="idm140091572120080"></a><a class="indexterm" name="idm140091572119008"></a><a class="indexterm" name="idm140091572117936"></a>
			<p>
				<font style="vertical-align: inherit;">
					<font style="vertical-align: inherit;">
						本章讨论存储的数据库对象，这些对象是根据存储在服务器上以供以后执行的SQL代码定义的。
					</font>
				</font>
			</p>
			<p>
				<font style="vertical-align: inherit;">
					<font style="vertical-align: inherit;">
						存储的对象包括以下对象类型：
					</font>
				</font>
			</p>
			<div class="itemizedlist">
				<ul class="itemizedlist" style="list-style-type: disc; ">
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									存储过程：</font>
							</font><a class="link" href="sql-syntax.html#create-procedure" title="13.1.17创建过程和创建函数语法"><code class="literal">CREATE
									PROCEDURE</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">使用该</font>
							</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">语句</font>
								<font style="vertical-align: inherit;">创建</font>
								<font style="vertical-align: inherit;">并调用</font>
								<font style="vertical-align: inherit;">的对象
								</font>
								<font style="vertical-align: inherit;">。</font>
								<font style="vertical-align: inherit;">过程没有返回值，但可以修改其参数以供调用者稍后检查。</font>
								<font style="vertical-align: inherit;">它还可以生成要返回给客户端程序的结果集。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									存储函数：</font>
							</font><a class="link" href="sql-syntax.html#create-function" title="13.1.14 CREATE FUNCTION语法"><code class="literal">CREATE
									FUNCTION</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">使用内置函数</font>
								<font style="vertical-align: inherit;">创建</font>
								<font style="vertical-align: inherit;">并使用</font>
								<font style="vertical-align: inherit;">的对象
								</font>
								<font style="vertical-align: inherit;">。</font>
								<font style="vertical-align: inherit;">您在表达式中调用它，并在表达式求值期间返回一个值。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									触发器：使用该对象创建的对象</font>
							</font><a class="link" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法"><code class="literal">CREATE
									TRIGGER</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">与表关联。</font>
								<font style="vertical-align: inherit;">当表发生特定事件（例如插入或更新）时，将激活触发器。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									事件：</font>
							</font><a class="link" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法"><code class="literal">CREATE
									EVENT</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">根据计划由服务器</font>
								<font style="vertical-align: inherit;">创建</font>
								<font style="vertical-align: inherit;">和调用</font>
								<font style="vertical-align: inherit;">的对象</font>
								<font style="vertical-align: inherit;">。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									视图：使用该对象创建的对象</font>
							</font><a class="link" href="sql-syntax.html#create-view" title="13.1.23创建视图语法"><code class="literal">CREATE
									VIEW</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">生成结果集。</font>
								<font style="vertical-align: inherit;">视图充当虚拟表。
								</font>
							</font>
						</p>
					</li>
				</ul>
			</div>
			<p>
				<font style="vertical-align: inherit;">
					<font style="vertical-align: inherit;">
						本文档中使用的术语反映了存储的对象层次结构：
					</font>
				</font>
			</p>
			<div class="itemizedlist">
				<ul class="itemizedlist" style="list-style-type: disc; ">
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									存储例程包括存储过程和函数。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									存储的程序包括存储的例程，触发器和事件。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									存储的对象包括存储的程序和视图。
								</font>
							</font>
						</p>
					</li>
				</ul>
			</div>
			<p>
				<font style="vertical-align: inherit;">
					<font style="vertical-align: inherit;">
						本章介绍如何使用存储的对象。</font>
					<font style="vertical-align: inherit;">以下部分提供有关与这些对象相关的语句的SQL语法以及有关对象处理的其他信息：
					</font>
				</font>
			</p>
			<div class="itemizedlist">
				<ul class="itemizedlist" style="list-style-type: disc; ">
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									为每个对象类型，还有</font>
							</font><code class="literal">CREATE</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">，
								</font>
							</font><code class="literal">ALTER</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">和</font>
							</font><code class="literal">DROP</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">控制哪些对象存在以及它们是如何定义语句。</font>
								<font style="vertical-align: inherit;">请参见
								</font>
							</font><a class="xref" href="sql-syntax.html#sql-syntax-data-definition" title="13.1数据定义语句">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">第13.1节“数据定义语句”</font>
								</font>
							</a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									该</font>
							</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">语句用于调用存储过程。</font>
								<font style="vertical-align: inherit;">请参见</font>
							</font><a class="xref" href="sql-syntax.html#call" title="13.2.1 CALL语法">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">第13.2.1节“CALL语法”</font>
								</font>
							</a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									存储的程序定义包括可以使用复合语句，循环，条件和声明变量的主体。</font>
								<font style="vertical-align: inherit;">请参见
								</font>
							</font><a class="xref" href="sql-syntax.html#sql-syntax-compound-statements" title="13.6复合语句语法">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">第13.6节“复合语句语法”</font>
								</font>
							</a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">。
								</font>
							</font>
						</p>
					</li>
					<li class="listitem">
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									检测到存储程序引用的对象的元数据更改，并在下次执行程序时自动重新分析受影响的语句。</font>
								<font style="vertical-align: inherit;">有关更多信息，请参见</font>
							</font><a class="xref" href="optimization.html#statement-caching" title="8.10.3准备好的声明和存储程序的缓存">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">第8.10.3节“准备语句和存储程序的缓存”</font>
								</font>
							</a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">。
								</font>
							</font>
						</p>
					</li>
				</ul>
			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="stored-programs-defining"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.1定义存储的程序</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							每个存储的程序都包含一个由SQL语句组成的主体。</font>
						<font style="vertical-align: inherit;">此语句可能是由以分号（</font>
					</font><code class="literal">;</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">）字符</font>
						<font style="vertical-align: inherit;">分隔的多个语句组成的复合语句</font>
						<font style="vertical-align: inherit;">。</font>
						<font style="vertical-align: inherit;">例如，以下存储过程的主体由一个</font>
					</font><a class="link" href="sql-syntax.html#begin-end" title="13.6.1 BEGIN ... END复合语句语法"><code class="literal">BEGIN
							...
							END</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">包含</font>
					</font><a class="link" href="sql-syntax.html#set-variable" title="13.7.5.1变量赋值的SET语法"><code class="literal">SET</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							语句</font>
						<font style="vertical-align: inherit;">的</font>
						<font style="vertical-align: inherit;">块
						</font>
						<font style="vertical-align: inherit;">和一个</font>
					</font><a class="link" href="sql-syntax.html#repeat" title="13.6.5.6 REPEAT语法"><code class="literal">REPEAT</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">本身包含另一个</font>
					</font><a class="link" href="sql-syntax.html#set-variable" title="13.7.5.1变量赋值的SET语法"><code class="literal">SET</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							语句</font>
						<font style="vertical-align: inherit;">的</font>
						<font style="vertical-align: inherit;">循环组成
						</font>
						<font style="vertical-align: inherit;">：
						</font>
					</font>
				</p>
				<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE PROCEDURE dorepeat（p1 INT）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  SET @x = 0;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  REPEAT SET @x = @x + 1; </font><font style="vertical-align: inherit;">UNTIL @x&gt; p1 END REPEAT;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
</pre>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							如果使用</font>
					</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">mysql</font>
								</font>
							</strong></span></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">客户端程序定义包含分号字符的存储程序，</font>
						<font style="vertical-align: inherit;">则会</font>
						<font style="vertical-align: inherit;">出现问题。</font>
						<font style="vertical-align: inherit;">默认情况下，</font>
					</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">mysql</font>
								</font>
							</strong></span></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">本身将分号识别为语句分隔符，因此必须临时重新定义分隔符以使</font>
					</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">mysql</font>
								</font>
							</strong></span></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">将整个存储的程序定义传递给服务器。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							要重新定义</font>
					</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">mysql</font>
								</font>
							</strong></span></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">分隔符，请使用该
						</font>
					</font><code class="literal">delimiter</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">命令。</font>
						<font style="vertical-align: inherit;">以下示例显示了如何对</font>
					</font><code class="literal">dorepeat()</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">刚刚显示</font>
						<font style="vertical-align: inherit;">的</font>
						<font style="vertical-align: inherit;">过程</font>
						<font style="vertical-align: inherit;">执行此操作</font>
						<font style="vertical-align: inherit;">。</font>
						<font style="vertical-align: inherit;">分隔符更改为</font>
					</font><code class="literal">//</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">以使整个定义作为单个语句传递到服务器，然后</font>
					</font><code class="literal">;</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">在调用过程之前</font>
						<font style="vertical-align: inherit;">还原到</font>
						<font style="vertical-align: inherit;">该定义。</font>
						<font style="vertical-align: inherit;">这使得</font>
					</font><code class="literal">;</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							过程体中使用</font>
						<font style="vertical-align: inherit;">的</font>
						<font style="vertical-align: inherit;">分隔符能够传递到服务器，而不是由</font>
					</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">mysql</font>
								</font>
							</strong></span></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							本身</font>
						<font style="vertical-align: inherit;">解释</font>
						<font style="vertical-align: inherit;">。
						</font>
					</font>
				</p>
				<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>delimiter //</code></strong><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font></font><strong class="userinput"><code>CREATE PROCEDURE dorepeat(p1 INT)</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt; </font></font><strong class="userinput"><code>BEGIN</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt;    </font></font><strong class="userinput"><code>SET @x = 0;</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt;    </font></font><strong class="userinput"><code>REPEAT SET @x = @x + 1; UNTIL @x &gt; p1 END REPEAT;</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt; </font></font><strong class="userinput"><code>END</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt;</font></font><strong class="userinput"><code>//</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询正常，0行受影响（0.00秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>delimiter ;</code></strong><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>CALL dorepeat(1000);</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询正常，0行受影响（0.00秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>SELECT @x;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">@x |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1001 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
1排（0.00秒）</font></font><font></font>
</pre>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							您可以将分隔符重新定义为除以外的字符串
						</font>
					</font><code class="literal">//</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">，分隔符可以包含单个字符或多个字符。</font>
						<font style="vertical-align: inherit;">您应该避免使用反斜杠（</font>
					</font><code class="literal">\</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">）字符，因为这是MySQL的转义字符。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							以下是获取参数，使用SQL函数执行操作并返回结果的函数示例。</font>
						<font style="vertical-align: inherit;">在这种情况下，不必使用，
						</font>
					</font><code class="literal">delimiter</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">因为函数定义不包含内部</font>
					</font><code class="literal">;</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">语句分隔符：
						</font>
					</font>
				</p>
				<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font></font><strong class="userinput"><code>CREATE FUNCTION hello (s CHAR(20))</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font></font><strong class="userinput"><code>RETURNS CHAR(50) DETERMINISTIC</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt;</font></font><strong class="userinput"><code>RETURN CONCAT('Hello, ',s,'!');</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询正常，0行受影响（0.00秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>SELECT hello('world');</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---------------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">你好（'世界'）|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---------------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">你好，世界！</font><font style="vertical-align: inherit;">|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---------------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
1排（0.00秒）</font></font><font></font>
</pre>
			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="stored-routines"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.2使用存储的例程</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<div class="toc">
					<dl class="toc"><dt><span class="section"><a href="stored-objects.html#stored-routines-syntax">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.1存储的例程语法</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines-privileges">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.2存储的例程和MySQL权限</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines-metadata">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.3存储的例程元数据</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#stored-routines-last-insert-id">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.4存储过程，函数，触发器和LAST_INSERT_ID（）</font>
									</font>
								</a></span></dt></dl>
				</div>
				<a class="indexterm" name="idm140091572051696"></a><a class="indexterm" name="idm140091572050624"></a><a class="indexterm"
				 name="idm140091572049136"></a><a class="indexterm" name="idm140091572048064"></a><a class="indexterm" name="idm140091572046576"></a><a
				 class="indexterm" name="idm140091572045504"></a>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							MySQL支持存储的例程（过程和函数）。</font>
						<font style="vertical-align: inherit;">存储例程是一组可以存储在服务器中的SQL语句。</font>
						<font style="vertical-align: inherit;">完成此操作后，客户端不需要继续重新发布单个语句，但可以参考存储的例程。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							存储例程在某些情况下特别有用：
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										当多个客户端应用程序以不同语言编写或在不同平台上工作时，需要执行相同的数据库操作。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										当安全是至关重要的。</font>
									<font style="vertical-align: inherit;">例如，银行使用存储过程和函数进行所有常见操作。</font>
									<font style="vertical-align: inherit;">这提供了一致且安全的环境，并且例程可以确保正确记录每个操作。</font>
									<font style="vertical-align: inherit;">在这样的设置中，应用程序和用户无法直接访问数据库表，但只能执行特定的存储例程。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							存储的例程可以提供改进的性能，因为需要在服务器和客户端之间发送较少的信息。</font>
						<font style="vertical-align: inherit;">权衡的是，这确实增加了数据库服务器上的负载，因为更多的工作在服务器端完成，而在客户端（应用程序）端完成的工作则更少。</font>
						<font style="vertical-align: inherit;">如果许多客户端计算机（例如Web服务器）仅由一个或几个数据库服务器提供服务，请考虑这一点。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							存储的例程还使您可以在数据库服务器中拥有函数库。</font>
						<font style="vertical-align: inherit;">这是现代应用程序语言共享的一项功能，可在内部实现此类设计（例如，通过使用类）。</font>
						<font style="vertical-align: inherit;">即使在数据库使用范围之外，使用这些客户端应用程序语言功能对程序员也是有益的。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							MySQL遵循存储例程的SQL：2003语法，IBM的DB2也使用它。</font>
						<font style="vertical-align: inherit;">支持此处描述的所有语法，并在适当的位置记录任何限制和扩展。
						</font>
					</font>
				</p>
				<h3><a name="idm140091572038080"></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">其他资源</font>
					</font>
				</h3>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										您可以在</font>
									<font style="vertical-align: inherit;">使用存储过程和函数时</font>
									<font style="vertical-align: inherit;">找到使用的</font>
								</font><a class="ulink" href="https://forums.mysql.com/list.php?98" target="_top">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">存储过程用户论坛</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										有关MySQL中存储例程的一些常见问题的解答，请参见</font>
								</font><a class="xref" href="faqs.html#faqs-stored-procs" title="A.4 MySQL 8.0 FAQ：存储过程和函数">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第A.4节“MySQL 8.0常见问题：存储过程和函数”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										存储例程的使用存在一些限制。</font>
									<font style="vertical-align: inherit;">请参见
									</font>
								</font><a class="xref" href="restrictions.html#stored-program-restrictions" title="C.1存储程序的限制">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第C.1节“存储程序的限制”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										存储例程的二进制日志记录按
									</font>
								</font><a class="xref" href="stored-objects.html#stored-programs-logging" title="24.7存储程序二进制日志">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.7节“存储程序二进制日志记录”中所述进行</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="stored-routines-syntax"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.1存储的例程语法</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								存储的例程是过程或函数。</font>
							<font style="vertical-align: inherit;">使用</font>
						</font><a class="link" href="sql-syntax.html#create-procedure" title="13.1.17创建过程和创建函数语法"><code class="literal">CREATE
								PROCEDURE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和</font>
						</font><a class="link" href="sql-syntax.html#create-function" title="13.1.14 CREATE FUNCTION语法"><code class="literal">CREATE
								FUNCTION</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">创建存储例程</font>
							<font style="vertical-align: inherit;">（请参见
							</font>
						</font><a class="xref" href="sql-syntax.html#create-procedure" title="13.1.17创建过程和创建函数语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.17节“创建过程和创建函数语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。</font>
							<font style="vertical-align: inherit;">使用</font>
						</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">调用过程</font>
							<font style="vertical-align: inherit;">（请参见
							</font>
						</font><a class="xref" href="sql-syntax.html#call" title="13.2.1 CALL语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.2.1节“CALL语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">），并且只能使用输出变量传回值。</font>
							<font style="vertical-align: inherit;">可以从语句内部调用函数，就像任何其他函数一样（即通过调用函数的名称），并且可以返回标量值。</font>
							<font style="vertical-align: inherit;">存储例程的主体可以使用复合语句（请参见
							</font>
						</font><a class="xref" href="sql-syntax.html#sql-syntax-compound-statements" title="13.6复合语句语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.6节“复合语句语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								可以使用</font>
						</font><a class="link" href="sql-syntax.html#drop-procedure" title="13.1.29 DROP PROCEDURE和DROP FUNCTION语法"><code
							 class="literal">DROP
								PROCEDURE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和</font>
						</font><a class="link" href="sql-syntax.html#drop-function" title="13.1.26 DROP FUNCTION语法"><code class="literal">DROP
								FUNCTION</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">删除存储的例程</font>
							<font style="vertical-align: inherit;">（请参见
							</font>
						</font><a class="xref" href="sql-syntax.html#drop-procedure" title="13.1.29 DROP PROCEDURE和DROP FUNCTION语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.29节“DROP PROCEDURE和DROP FUNCTION语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">），并使用</font>
						</font><a class="link" href="sql-syntax.html#alter-procedure" title="13.1.7更改过程语法"><code class="literal">ALTER
								PROCEDURE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><a class="link" href="sql-syntax.html#alter-function" title="13.1.4 ALTER FUNCTION语法"><code class="literal">ALTER
								FUNCTION</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句进行</font>
							<font style="vertical-align: inherit;">更改
							</font>
							<font style="vertical-align: inherit;">（请参见
							</font>
						</font><a class="xref" href="sql-syntax.html#alter-procedure" title="13.1.7更改过程语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.7节“ALTER PROCEDURE语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								存储过程或函数与特定数据库相关联。</font>
							<font style="vertical-align: inherit;">这有几个含义：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											调用例程时，将</font>
										<font style="vertical-align: inherit;">执行</font>
										<font style="vertical-align: inherit;">隐式</font>
										<font style="vertical-align: inherit;">（并在例程终止时撤消）。
										</font>
										<font style="vertical-align: inherit;">不允许存储例程中的语句。
										</font>
									</font><code class="literal">USE
										<em class="replaceable"><code>db_name</code></em></code>
									<font style="vertical-align: inherit;"></font><a class="link" href="sql-syntax.html#use" title="13.8.4 USE语法"><code
										 class="literal">USE</code></a>
									<font style="vertical-align: inherit;"></font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											您可以使用数据库名称限定例程名称。</font>
										<font style="vertical-align: inherit;">这可用于引用不在当前数据库中的例程。</font>
										<font style="vertical-align: inherit;">例如，要调用</font>
										<font style="vertical-align: inherit;">与</font>
										<font style="vertical-align: inherit;">数据库</font>
										<font style="vertical-align: inherit;">关联</font>
										<font style="vertical-align: inherit;">的存储过程
										</font>
									</font><code class="literal">p</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或函数</font>
										<font style="vertical-align: inherit;">，您可以说</font>
										<font style="vertical-align: inherit;">或
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font><code class="literal">f</code>
									<font style="vertical-align: inherit;"></font><code class="literal">test</code>
									<font style="vertical-align: inherit;"></font><code class="literal">CALL test.p()</code>
									<font style="vertical-align: inherit;"></font><code class="literal">test.f()</code>
									<font style="vertical-align: inherit;"></font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											删除数据库时，也会删除与其关联的所有存储例程。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								存储的函数不能递归。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								允许存储过程中的递归，但默认情况下禁用。</font>
							<font style="vertical-align: inherit;">要启用递归，请将
							</font>
						</font><a class="link" href="server-administration.html#sysvar_max_sp_recursion_depth"><code class="literal">max_sp_recursion_depth</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">服务器系统变量设置为大于零的值。</font>
							<font style="vertical-align: inherit;">存储过程递归增加了对线程堆栈空间的需求。</font>
							<font style="vertical-align: inherit;">如果增加值
							</font>
						</font><a class="link" href="server-administration.html#sysvar_max_sp_recursion_depth"><code class="literal">max_sp_recursion_depth</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，可能需要通过增加</font>
						</font><a class="link" href="server-administration.html#sysvar_thread_stack"><code class="literal">thread_stack</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">服务器启动时</font>
							<font style="vertical-align: inherit;">的值来增加线程堆栈大小
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">有关</font>
							<font style="vertical-align: inherit;">更多信息</font>
						</font><a class="xref" href="server-administration.html#server-system-variables" title="5.1.8服务器系统变量">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">，</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">请参见</font><a class="xref" href="server-administration.html#server-system-variables"
							 title="5.1.8服务器系统变量">
								<font style="vertical-align: inherit;">第5.1.8节“服务器系统变量”</font>
							</a>
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL支持一个非常有用的扩展，它允许在</font>
						</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">存储过程中</font>
							<font style="vertical-align: inherit;">使用常规</font>
							<font style="vertical-align: inherit;">语句（即，不使用游标或局部变量）。</font>
							<font style="vertical-align: inherit;">这种查询的结果集只是直接发送给客户端。</font>
							<font style="vertical-align: inherit;">多个</font>
						</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								语句生成多个结果集，因此客户端必须使用支持多个结果集的MySQL客户端库。</font>
							<font style="vertical-align: inherit;">这意味着客户端必须使用MySQL版本的客户端库，至少与4.1版本一样。</font>
							<font style="vertical-align: inherit;">客户端还应</font>
						</font><code class="literal">CLIENT_MULTI_RESULTS</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">在连接时</font>
							<font style="vertical-align: inherit;">指定
							</font>
							<font style="vertical-align: inherit;">选项。</font>
							<font style="vertical-align: inherit;">对于C程序，可以使用</font>
						</font><a class="link" href="connectors-apis.html#mysql-real-connect" title="28.7.7.54 mysql_real_connect（）"><code
							 class="literal">mysql_real_connect()</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">C API函数</font>
							<font style="vertical-align: inherit;">完成此操作
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">请参见</font>
						</font><a class="xref" href="connectors-apis.html#mysql-real-connect" title="28.7.7.54 mysql_real_connect（）">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第28.7.7.54节“mysql_real_connect（）”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><a class="xref" href="connectors-apis.html#c-api-multiple-queries" title="28.7.23 C API多语句执行支持">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第28.7.23节“C API多语句执行支持”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="stored-routines-privileges"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.2存储的例程和MySQL权限</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL授权系统将存储的例程考虑在内，如下所示：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											将</font>
									</font><a class="link" href="security.html#priv_create-routine"><code class="literal">CREATE ROUTINE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">需要的权限来创建存储例程。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在</font>
									</font><a class="link" href="security.html#priv_alter-routine"><code class="literal">ALTER ROUTINE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">需要的权限更改或删除保存的程序。</font>
										<font style="vertical-align: inherit;">如有必要，此权限将自动授予例程的创建者，并在例程被删除时从创建者中删除。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">执行存储例程需要</font>
										<font style="vertical-align: inherit;">
											该</font>
										<font style="vertical-align: inherit;">特权。</font>
										<font style="vertical-align: inherit;">但是，如果需要，此特权将自动授予例程的创建者（并在例程被删除时从创建者中删除）。</font>
										<font style="vertical-align: inherit;">此外，</font>
									</font><code class="literal">SQL SECURITY</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											例程</font>
										<font style="vertical-align: inherit;">的默认</font>
										<font style="vertical-align: inherit;">特征是</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，允许访问与例程关联的数据库的用户执行例程。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果
										</font>
									</font><a class="link" href="server-administration.html#sysvar_automatic_sp_privileges"><code class="literal">automatic_sp_privileges</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											系统变量为0，
										</font>
									</font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">并且
										</font>
									</font><a class="link" href="security.html#priv_alter-routine"><code class="literal">ALTER ROUTINE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">权限不会自动授予，并从日常的创造者下降。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											例程的创建者是用于为其执行</font>
									</font><code class="literal">CREATE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">的帐户
										</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">这可能</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">与例程定义中</font>
										<font style="vertical-align: inherit;">命名的帐户
										</font>
										<font style="vertical-align: inherit;">不同。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="stored-routines-metadata"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.3存储的例程元数据</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571975600"></a><a class="indexterm" name="idm140091571974112"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								有关存储例程的元数据可以通过以下方式获得：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											查询</font>
										<font style="vertical-align: inherit;">数据库</font>
									</font><a class="link" href="information-schema.html#routines-table" title="25.23 INFORMATION_SCHEMA ROUTINES表"><code
										 class="literal">ROUTINES</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">表
										</font>
									</font><code class="literal">INFORMATION_SCHEMA</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="information-schema.html#routines-table" title="25.23 INFORMATION_SCHEMA ROUTINES表">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第25.23节“INFORMATION_SCHEMA ROUTINES表”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用</font>
									</font><a class="link" href="sql-syntax.html#show-create-procedure" title="13.7.6.9 SHOW CREATE PROCEDURE语法"><code
										 class="literal">SHOW CREATE PROCEDURE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											和</font>
									</font><a class="link" href="sql-syntax.html#show-create-function" title="13.7.6.8 SHOW CREATE FUNCTION语法"><code
										 class="literal">SHOW CREATE FUNCTION</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											语句查看例程定义。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="sql-syntax.html#show-create-procedure" title="13.7.6.9 SHOW CREATE PROCEDURE语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.9节“显示创建过程语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用</font>
									</font><a class="link" href="sql-syntax.html#show-procedure-status" title="13.7.6.28 SHOW PROCEDURE STATUS语法"><code
										 class="literal">SHOW PROCEDURE STATUS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											和</font>
									</font><a class="link" href="sql-syntax.html#show-function-status" title="13.7.6.20显示功能状态语法"><code class="literal">SHOW
											FUNCTION STATUS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											语句查看常规特征。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="sql-syntax.html#show-procedure-status" title="13.7.6.28 SHOW PROCEDURE STATUS语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.28节“显示过程状态语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="stored-routines-last-insert-id"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.2.4存储过程，函数，触发器和LAST_INSERT_ID（）</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571958992"></a><a class="indexterm" name="idm140091571957504"></a><a class="indexterm"
					 name="idm140091571956016"></a><a class="indexterm" name="idm140091571954528"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在存储例程（过程或函数）或触发器</font>
						</font><a class="link" href="functions.html#function_last-insert-id"><code class="literal">LAST_INSERT_ID()</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">的主体内</font>
							<font style="vertical-align: inherit;">，</font>
							<font style="vertical-align: inherit;">更改</font>
							<font style="vertical-align: inherit;">的值与</font>
							<font style="vertical-align: inherit;">在这些类型的对象的主体外执行的语句</font>
							<font style="vertical-align: inherit;">的
							</font>
							<font style="vertical-align: inherit;">更改方式相同（请参见</font>
						</font><a class="xref" href="functions.html#information-functions" title="12.15信息功能">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第12.15节“信息函数”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。</font>
						</font><a class="link" href="functions.html#function_last-insert-id"><code class="literal">LAST_INSERT_ID()</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">以下语句可以看出</font>
							<font style="vertical-align: inherit;">存储的例程或触发器对其值的影响
							</font>
							<font style="vertical-align: inherit;">取决于例程的类型：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果存储过程执行更改值的语句，则更改的值</font>
									</font><a class="link" href="functions.html#function_last-insert-id"><code class="literal">LAST_INSERT_ID()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">将由过程调用之后的语句看到。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于更改值的存储函数和触发器，当函数或触发器结束时，将恢复该值，因此后续语句不会看到更改的值。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>

			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="triggers"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.3使用触发器</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<div class="toc">
					<dl class="toc"><dt><span class="section"><a href="stored-objects.html#trigger-syntax">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.3.1触发语法和示例</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#trigger-metadata">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.3.2触发元数据</font>
									</font>
								</a></span></dt></dl>
				</div>
				<a class="indexterm" name="idm140091571944352"></a>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							触发器是与表关联的命名数据库对象，并在表发生特定事件时激活。</font>
						<font style="vertical-align: inherit;">触发器的一些用途是执行对要插入表中的值的检查，或者对更新中涉及的值执行计算。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							触发器定义为在语句插入，更新或删除关联表中的行时激活。</font>
						<font style="vertical-align: inherit;">这些行操作是触发事件。</font>
						<font style="vertical-align: inherit;">例如，可以通过
						</font>
					</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">或</font>
					</font><a class="link" href="sql-syntax.html#load-data" title="13.2.7 LOAD DATA语法"><code class="literal">LOAD
							DATA</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">语句插入行，并为每个插入的行激活插入触发器。</font>
						<font style="vertical-align: inherit;">可以将触发器设置为在触发事件之前或之后激活。</font>
						<font style="vertical-align: inherit;">例如，您可以在插入表中的每一行之前或更新的每一行之后激活一个触发器。
						</font>
					</font>
				</p>
				<div class="important" style="margin-left: 0.5in; margin-right: 0.5in;">

					<div class="admon-title">
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								重要
							</font>
						</font>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL触发器仅针对SQL语句对表所做的更改进行激活。</font>
							<font style="vertical-align: inherit;">这包括对可更新视图的基础表的更改。</font>
							<font style="vertical-align: inherit;">对于不将SQL语句传输到MySQL服务器的API所做的更改，触发器不会激活。</font>
							<font style="vertical-align: inherit;">这意味着使用</font>
						</font><a class="link" href="mysql-cluster.html" title="第22章MySQL NDB Cluster 8.0"><code class="literal">NDB</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">API </font>
							<font style="vertical-align: inherit;">进行的更新不会激活触发器</font>
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								更改</font>
						</font><code class="literal">INFORMATION_SCHEMA</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><code class="literal">performance_schema</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表格</font>
							<font style="vertical-align: inherit;">不会激活触发器
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">这些表实际上是视图上不允许的视图和触发器。
							</font>
						</font>
					</p>
				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							以下部分描述了创建和删除触发器的语法，显示了如何使用它们的一些示例，并指出了如何获取触发器元数据。
						</font>
					</font>
				</p>
				<h3><a name="idm140091571934336"></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">其他资源</font>
					</font>
				</h3>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										您可以在使用</font>
								</font><a class="ulink" href="https://forums.mysql.com/list.php?100" target="_top">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">触发器</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">时</font>
									<font style="vertical-align: inherit;">找到使用的</font><a class="ulink" href="https://forums.mysql.com/list.php?100"
									 target="_top">
										<font style="vertical-align: inherit;">触发器用户论坛</font>
									</a>
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										有关</font>
								</font><a class="xref" href="faqs.html#faqs-triggers" title="A.5 MySQL 8.0常见问题：触发器">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">MySQL中触发器的常见问题的解答</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，请参见</font><a class="xref" href="faqs.html#faqs-triggers" title="A.5 MySQL 8.0常见问题：触发器">
										<font style="vertical-align: inherit;">第A.5节“MySQL 8.0 FAQ：触发器”</font>
									</a>
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										使用触发器有一些限制; </font>
									<font style="vertical-align: inherit;">请参见
									</font>
								</font><a class="xref" href="restrictions.html#stored-program-restrictions" title="C.1存储程序的限制">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第C.1节“存储程序的限制”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										触发器的二进制日志记录按
									</font>
								</font><a class="xref" href="stored-objects.html#stored-programs-logging" title="24.7存储程序二进制日志">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.7节“存储程序二进制日志记录”中所述进行</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="trigger-syntax"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.3.1触发语法和示例</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要创建触发器或删除触发器，请使用</font><a class="xref" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法">
								<font style="vertical-align: inherit;">第13.1.22节“创建触发器语法”</font>
							</a>
							<font style="vertical-align: inherit;">和
							</font><a class="xref" href="sql-syntax.html#drop-trigger" title="13.1.34 DROP TRIGGER语法">
								<font style="vertical-align: inherit;">第13.1.34节“DROP TRIGGER语法”中</font>
							</a>
							<font style="vertical-align: inherit;">所述</font>
							<font style="vertical-align: inherit;">的
							</font>
						</font><a class="link" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法"><code class="literal">CREATE
								TRIGGER</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><a class="link" href="sql-syntax.html#drop-trigger" title="13.1.34 DROP TRIGGER语法"><code class="literal">DROP
								TRIGGER</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">。
							</font>
						</font><a class="xref" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法">
							<font style="vertical-align: inherit;"></font>
						</a>
						<font style="vertical-align: inherit;"></font><a class="xref" href="sql-syntax.html#drop-trigger" title="13.1.34 DROP TRIGGER语法">
							<font style="vertical-align: inherit;"></font>
						</a>
						<font style="vertical-align: inherit;"></font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								下面是一个简单的示例，它将触发器与表关联起来，以激活</font>
						</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">操作。</font>
							<font style="vertical-align: inherit;">触发器充当累加器，将插入到表的一列中的值相加。
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询正常，0行受影响（0.03秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>CREATE TRIGGER ins_sum BEFORE INSERT ON account</code></strong>
       <strong class="userinput"><code>FOR EACH ROW SET @sum = @sum + NEW.amount;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询OK，0行受影响（0.01秒）</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								该</font>
						</font><a class="link" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法"><code class="literal">CREATE
								TRIGGER</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句创建一个</font>
						</font><code class="literal">ins_sum</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">与该</font>
						</font><code class="literal">account</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表</font>
							<font style="vertical-align: inherit;">关联的</font>
							<font style="vertical-align: inherit;">名为的触发器</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">它还包括指定触发器操作时间，触发事件以及触发器激活时要执行的操作的子句：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											关键字</font>
									</font><code class="literal">BEFORE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">表示触发操作时间。</font>
										<font style="vertical-align: inherit;">在这种情况下，触发器在每行插入表格之前激活。</font>
										<font style="vertical-align: inherit;">这里允许的另一个关键字是</font>
									</font><code class="literal">AFTER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											关键字</font>
									</font><code class="literal">INSERT</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">表示触发事件; </font>
										<font style="vertical-align: inherit;">也就是说，激活触发器的操作类型。</font>
										<font style="vertical-align: inherit;">在该示例中，</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											操作导致触发器激活。</font>
										<font style="vertical-align: inherit;">您还可以创建触发器</font>
									</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">和
										</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">操作。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											以下语句</font>
									</font><code class="literal">FOR EACH ROW</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											定义了触发器主体; </font>
										<font style="vertical-align: inherit;">也就是说，每次触发器激活时执行的语句，对于受触发事件影响的每一行都会发生一次。</font>
										<font style="vertical-align: inherit;">在该示例中，触发器主体是一个简单的
										</font>
									</font><a class="link" href="sql-syntax.html#set-variable" title="13.7.5.1变量赋值的SET语法"><code class="literal">SET</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											，它将插入到</font>
									</font><code class="literal">amount</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">列中</font>
										<font style="vertical-align: inherit;">的值累积到用户变量中</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">该语句引用列</font>
									</font><code class="literal">NEW.amount</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，表示
										</font>
									</font><span class="quote">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">“ </font><span class="quote">
												<font style="vertical-align: inherit;">要插入新行</font>
											</span>
										</font><span class="quote">
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">的</font>
											</font><code class="literal">amount</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">列</font>
												<font style="vertical-align: inherit;">的值</font>
											</font>
										</span>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;"> ” </font><span class="quote">
												<font style="vertical-align: inherit;">。</font>
											</span>
											<font style="vertical-align: inherit;">”</font>
										</font>
									</span>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要使用触发器，请将accumulator变量设置为零，执行一个</font>
						</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句，然后查看该变量后面的值：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font></font><strong class="userinput"><code>SET @sum = 0;</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font></font><strong class="userinput"><code>INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt;</font></font><strong class="userinput"><code>SELECT @sum AS 'Total amount inserted';</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ----------------------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">插入总量|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ----------------------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1852.48 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ----------------------- +</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在这种情况下，</font>
							<font style="vertical-align: inherit;">语句执行</font>
						</font><code class="literal">@sum</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">后
							</font>
							<font style="vertical-align: inherit;">的值</font>
						</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">是
							</font>
						</font><code class="literal">14.98 + 1937.50 - 100</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，或
							</font>
						</font><code class="literal">1852.48</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要销毁触发器，请使用</font>
						</font><a class="link" href="sql-syntax.html#drop-trigger" title="13.1.34 DROP TRIGGER语法"><code class="literal">DROP
								TRIGGER</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句。</font>
							<font style="vertical-align: inherit;">如果触发器不在默认架构中，则必须指定架构名称：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>DROP TRIGGER test.ins_sum;</code></strong>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果删除表，则表的任何触发器也将被删除。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								模式名称空间中存在触发器名称，这意味着所有触发器必须在模式中具有唯一名称。</font>
							<font style="vertical-align: inherit;">不同模式中的触发器可以具有相同的名称。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								可以为具有相同触发事件和操作时间的给定表定义多个触发器。</font>
							<font style="vertical-align: inherit;">例如，您可以</font>
						</font><code class="literal">BEFORE UPDATE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">为表创建</font>
							<font style="vertical-align: inherit;">两个</font>
							<font style="vertical-align: inherit;">触发器。</font>
							<font style="vertical-align: inherit;">默认情况下，具有相同触发事件和操作时间的触发器按创建顺序激活。</font>
							<font style="vertical-align: inherit;">要影响触发器顺序，请在</font>
						</font><code class="literal">FOR EACH ROW</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">指示</font>
							<font style="vertical-align: inherit;">之后指定一个子句</font>
							<font style="vertical-align: inherit;">，</font>
						</font><code class="literal">FOLLOWS</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或者
							</font>
							<font style="vertical-align: inherit;">指定</font>
						</font><code class="literal">PRECEDES</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">具有相同触发事件和操作时间的现有触发器的名称。</font>
							<font style="vertical-align: inherit;">使用时
							</font>
						</font><code class="literal">FOLLOWS</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，新触发器在现有触发器之后激活。</font>
							<font style="vertical-align: inherit;">使用时</font>
						</font><code class="literal">PRECEDES</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，新触发器在现有触发器之前激活。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								例如，以下触发器定义</font>
						</font><code class="literal">BEFORE INSERT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">为</font>
						</font><code class="literal">account</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表</font>
							<font style="vertical-align: inherit;">定义了另一个
							</font>
							<font style="vertical-align: inherit;">触发器
							</font>
							<font style="vertical-align: inherit;">：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>CREATE TRIGGER ins_transaction BEFORE INSERT ON account</code></strong>
       <strong class="userinput"><code>FOR EACH ROW PRECEDES ins_sum</code></strong>
       <strong class="userinput"><code>SET</code></strong>
       <strong class="userinput"><code>@deposits = @deposits + IF(NEW.amount&gt;0,NEW.amount,0),</code></strong>
       <strong class="userinput"><code>@withdrawals = @withdrawals + IF(NEW.amount&lt;0,-NEW.amount,0);</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询OK，0行受影响（0.01秒）</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								此触发器</font>
						</font><code class="literal">ins_transaction</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">类似于
							</font>
						</font><code class="literal">ins_sum</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">但分别累积存款和取款。</font>
							<font style="vertical-align: inherit;">它有一个</font>
						</font><code class="literal">PRECEDES</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								条款，使它在之前激活
							</font>
						</font><code class="literal">ins_sum</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">; </font>
							<font style="vertical-align: inherit;">没有该子句，它会在之后激活，</font>
						</font><code class="literal">ins_sum</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">因为它是在之后创建的
							</font>
						</font><code class="literal">ins_sum</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在触发器主体中，使用</font>
						</font><code class="literal">OLD</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><code class="literal">NEW</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">关键字可以访问受触发器影响的行中的列。</font>
						</font><code class="literal">OLD</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">并且
							</font>
						</font><code class="literal">NEW</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">是触发器的MySQL扩展; </font>
							<font style="vertical-align: inherit;">它们不区分大小写。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在</font>
						</font><code class="literal">INSERT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">触发器中，只能
							</font>
							<font style="vertical-align: inherit;">使用; </font>
							<font style="vertical-align: inherit;">没有旧排。</font>
							<font style="vertical-align: inherit;">在</font>
							<font style="vertical-align: inherit;">触发器中，只能</font>
							<font style="vertical-align: inherit;">
								使用; </font>
							<font style="vertical-align: inherit;">没有新的行。</font>
							<font style="vertical-align: inherit;">在</font>
							<font style="vertical-align: inherit;">
								触发器中，您可以
							</font>
							<font style="vertical-align: inherit;">在更新之前
							</font>
							<font style="vertical-align: inherit;">引用行的列，并在更新后引用行的列。
							</font>
						</font><code class="literal">NEW.<em class="replaceable"><code>col_name</code></em></code>
						<font style="vertical-align: inherit;"></font><code class="literal">DELETE</code>
						<font style="vertical-align: inherit;"></font><code class="literal">OLD.<em class="replaceable"><code>col_name</code></em></code>
						<font style="vertical-align: inherit;"></font><code class="literal">UPDATE</code>
						<font style="vertical-align: inherit;"></font><code class="literal">OLD.<em class="replaceable"><code>col_name</code></em></code>
						<font style="vertical-align: inherit;"></font><code class="literal">NEW.<em class="replaceable"><code>col_name</code></em></code>
						<font style="vertical-align: inherit;"></font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								名为的列</font>
						</font><code class="literal">OLD</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">是只读的。</font>
							<font style="vertical-align: inherit;">您可以引用它（如果您有</font>
						</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								权限），但不能修改它。</font>
						</font><code class="literal">NEW</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">如果您拥有该
							</font>
						</font><a class="link" href="security.html#priv_select"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限，则</font>
							<font style="vertical-align: inherit;">可以引用名为的列</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">在
							</font>
						</font><code class="literal">BEFORE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">触发器中，</font>
							<font style="vertical-align: inherit;">如果您拥有该
							</font>
							<font style="vertical-align: inherit;">权限</font>
							<font style="vertical-align: inherit;">，也可以更改其值</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">这意味着您可以使用触发器来修改要插入新行或用于更新行的值。</font>
							<font style="vertical-align: inherit;">（这样的</font>
							<font style="vertical-align: inherit;">
								语句对</font>
							<font style="vertical-align: inherit;">触发器</font>
							<font style="vertical-align: inherit;">没有影响，</font>
							<font style="vertical-align: inherit;">因为行已经发生了变化。）
							</font>
						</font><code class="literal">SET NEW.<em class="replaceable"><code>col_name</code></em> =
							<em class="replaceable"><code>value</code></em></code>
						<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_update"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;"></font><code class="literal">SET</code>
						<font style="vertical-align: inherit;"></font><code class="literal">AFTER</code>
						<font style="vertical-align: inherit;"></font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在一个</font>
						</font><code class="literal">BEFORE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">触发器中，</font>
						</font><code class="literal">NEW</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								对于一个值</font>
						</font><code class="literal">AUTO_INCREMENT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">列是0，实际上没有被插入新行时自动生成的序列号。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								通过使用该</font>
						</font><a class="link" href="sql-syntax.html#begin-end" title="13.6.1 BEGIN ... END复合语句语法"><code class="literal">BEGIN
								...
								END</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">构造，您可以定义执行多个语句的触发器。</font>
							<font style="vertical-align: inherit;">在</font>
						</font><code class="literal">BEGIN</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">块中，您还可以使用存储例程（例如条件和循环）中允许的其他语法。</font>
							<font style="vertical-align: inherit;">但是，就像存储例程一样，如果使用</font>
						</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">mysql</font>
									</font>
								</strong></span></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">程序定义执行多个语句的触发器，则必须重新定义</font>
						</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">mysql</font>
									</font>
								</strong></span></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句分隔符，以便可以</font>
						</font><code class="literal">;</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">在触发器定义中</font>
							<font style="vertical-align: inherit;">使用</font>
							<font style="vertical-align: inherit;">语句分隔符。</font>
							<font style="vertical-align: inherit;">以下示例说明了这些要点。</font>
							<font style="vertical-align: inherit;">它定义了一个</font>
						</font><code class="literal">UPDATE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								触发器检查用于更新每一行的新值，并将值修改为0到100之间的范围。这必须是一个</font>
						</font><code class="literal">BEFORE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">触发器，因为在用于更新行之前必须检查该值：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font></font><strong class="userinput"><code>delimiter //</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font><font style="vertical-align: inherit;">
mysql&gt;</font></font><strong class="userinput"><code>CREATE TRIGGER upd_check BEFORE UPDATE ON account</code></strong>
       <strong class="userinput"><code>FOR EACH ROW</code></strong>
       <strong class="userinput"><code>BEGIN</code></strong>
           <strong class="userinput"><code>IF NEW.amount &lt; 0 THEN</code></strong>
               <strong class="userinput"><code>SET NEW.amount = 0;</code></strong>
           <strong class="userinput"><code>ELSEIF NEW.amount &gt; 100 THEN</code></strong>
               <strong class="userinput"><code>SET NEW.amount = 100;</code></strong>
           <strong class="userinput"><code>END IF;</code></strong>
       <strong class="userinput"><code>END;//</code></strong><font style="vertical-align: inherit;"></font><strong class="userinput"><code>delimiter ;</code></strong>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								可以更容易地单独定义存储过程，然后使用简单</font>
						</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">从触发器调用它
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">如果要从多个触发器中执行相同的代码，这也是有利的。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								触发器在激活时执行的语句中可能出现的内容存在限制：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											触发器不能使用该</font>
									</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											语句来调用将数据返回给客户端或使用动态SQL的存储过程。</font>
										<font style="vertical-align: inherit;">（允许存储过程通过</font>
									</font><code class="literal">OUT</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或</font>
									</font><code class="literal">INOUT</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											参数</font>
										<font style="vertical-align: inherit;">将数据返回到触发器
										</font>
										<font style="vertical-align: inherit;">。）
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											触发不能使用语句或明或暗地开始或结束交易，如
										</font>
									</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
										 class="literal">START
											TRANSACTION</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，</font>
									</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
										 class="literal">COMMIT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或</font>
									</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
										 class="literal">ROLLBACK</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">（</font>
									</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
										 class="literal">ROLLBACK to
											SAVEPOINT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">被允许，因为它不会结束交易。）。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								另请参见</font>
						</font><a class="xref" href="restrictions.html#stored-program-restrictions" title="C.1存储程序的限制">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第C.1节“存储程序的限制”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL在触发执行期间处理错误，如下所示：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果</font>
									</font><code class="literal">BEFORE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">触发器失败，则不执行相应行上的操作。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											甲</font>
									</font><code class="literal">BEFORE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">触发由被激活的
										</font>
									</font><span class="emphasis"><em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">尝试</font>
											</font>
										</em></span>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">插入或修改的行，而不管的尝试是否成功随后。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											一个</font>
									</font><code class="literal">AFTER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">只有当任何触发器执行
										</font>
									</font><code class="literal">BEFORE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">触发器和行操作成功执行。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											a </font>
									</font><code class="literal">BEFORE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或
										</font>
									</font><code class="literal">AFTER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">触发</font>
										<font style="vertical-align: inherit;">期间的错误</font>
										<font style="vertical-align: inherit;">导致导致触发器调用的整个语句失败。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于事务表，语句失败应导致回滚语句执行的所有更改。</font>
										<font style="vertical-align: inherit;">触发器失败会导致语句失败，因此触发器失败也会导致回滚。</font>
										<font style="vertical-align: inherit;">对于非事务性表，无法执行此类回滚，因此尽管语句失败，但在错误点之前执行的任何更改仍然有效。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								触发器可以按名称包含对表的直接引用，例如</font>
						</font><code class="literal">testref</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">此示例中显示</font>
							<font style="vertical-align: inherit;">的命名触发器</font>
							<font style="vertical-align: inherit;">：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE test1（a1 INT）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE TABLE test2（a2 INT）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE TABLE test3（a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE TABLE test4（</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY，</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  b4 INT DEFAULT 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
）;</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
分隔符|</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
在插入test1之前创建TRIGGER testref</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  对于每一行</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    INSERT INTO test2 SET a2 = NEW.a1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    从test3删除WHERE a3 = NEW.a1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  结束;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
|</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
分隔符;</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
插入test3（a3）VALUES</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  （NULL），（NULL），（NULL），（NULL），（NULL），</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  （NULL），（NULL），（NULL），（NULL），（NULL）;</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
插入test4（a4）VALUES</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  （0），（0），（0），（0），（0），（0），（0），（0），（0），（0）;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								假设您将以下值插入表中
							</font>
						</font><code class="literal">test1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，如下所示：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>INSERT INTO test1 VALUES </code></strong>
       <strong class="userinput"><code>(1), (3), (1), (7), (1), (8), (4), (4);</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
查询OK，8行受影响（0.01秒）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
记录：8个重复：0个警告：0</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								因此，这四个表包含以下数据：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>SELECT * FROM test1;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">a1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">3 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">7 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">8 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">4 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">4 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
8行（0.00秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>SELECT * FROM test2;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">a2 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">3 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">7 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">8 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">4 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">4 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
8行（0.00秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>SELECT * FROM test3;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">a3 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">2 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">5 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">6 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">9 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">10 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
5行（0.00秒）</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>SELECT * FROM test4;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---- + ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">a4 | </font><font style="vertical-align: inherit;">b4 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---- + ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">1 | </font><font style="vertical-align: inherit;">3 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">2 | </font><font style="vertical-align: inherit;">0 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">3 | </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">4 | </font><font style="vertical-align: inherit;">2 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">5 | </font><font style="vertical-align: inherit;">0 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">6 | </font><font style="vertical-align: inherit;">0 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">7 | </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">8 | </font><font style="vertical-align: inherit;">1 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">9 | </font><font style="vertical-align: inherit;">0 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">10 | </font><font style="vertical-align: inherit;">0 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ---- + ------ +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
10行（0.00秒）</font></font><font></font>
</pre>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="trigger-metadata"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.3.2触发元数据</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571794048"></a><a class="indexterm" name="idm140091571792560"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								触发器的元数据可以通过以下方式获得：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											查询</font>
										<font style="vertical-align: inherit;">数据库</font>
									</font><a class="link" href="information-schema.html#triggers-table" title="25.34 INFORMATION_SCHEMA TRIGGERS表"><code
										 class="literal">TRIGGERS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">表
										</font>
									</font><code class="literal">INFORMATION_SCHEMA</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="information-schema.html#triggers-table" title="25.34 INFORMATION_SCHEMA TRIGGERS表">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第25.34节“INFORMATION_SCHEMA TRIGGERS表”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用该</font>
									</font><a class="link" href="sql-syntax.html#show-create-trigger" title="13.7.6.11 SHOW CREATE TRIGGER语法"><code
										 class="literal">SHOW CREATE TRIGGER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											声明。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#show-create-trigger" title="13.7.6.11 SHOW CREATE TRIGGER语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.11节“显示创建触发器语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用该</font>
									</font><a class="link" href="sql-syntax.html#show-triggers" title="13.7.6.38 SHOW TRIGGERS语法"><code class="literal">SHOW
											TRIGGERS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											声明。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#show-triggers" title="13.7.6.38 SHOW TRIGGERS语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.38节“显示触发器语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>

			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="event-scheduler"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.4使用事件调度程序</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<div class="toc">
					<dl class="toc"><dt><span class="section"><a href="stored-objects.html#events-overview">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.1事件调度程序概述</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-configuration">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.2事件调度程序配置</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-syntax">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.3事件语法</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-metadata">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.4事件元数据</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-status-info">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.5事件调度程序状态</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#events-privileges">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.6事件调度程序和MySQL权限</font>
									</font>
								</a></span></dt></dl>
				</div>
				<a class="indexterm" name="idm140091571779920"></a><a class="indexterm" name="idm140091571778880"></a>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							在</font>
					</font><span class="firstterm">
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">MySQL的事件调度</font>
						</font>
					</span>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							管理事件的调度和执行，也就是说，按照时间表运行的任务。</font>
						<font style="vertical-align: inherit;">以下讨论涵盖事件调度程序，并分为以下几个部分：
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<a class="xref" href="stored-objects.html#events-overview" title="24.4.1事件调度程序概述">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.4.1节“事件调度程序概述”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">提供了对MySQL事件的介绍和概念概述。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<a class="xref" href="stored-objects.html#events-syntax" title="24.4.3事件语法">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.4.3节“事件语法”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">讨论了用于创建，更改和删除MySQL事件的SQL语句。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<a class="xref" href="stored-objects.html#events-metadata" title="24.4.4事件元数据">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.4.4节“事件元数据”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">显示了如何获取有关事件的信息以及MySQL服务器如何存储此信息。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<a class="xref" href="stored-objects.html#events-privileges" title="24.4.6事件调度程序和MySQL权限">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.4.6节“事件调度程序和MySQL权限”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">讨论了处理事件所需的权限以及事件在执行时对权限的影响。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							存储例程需要</font>
						<font style="vertical-align: inherit;">系统数据库中</font>
						<font style="vertical-align: inherit;">的</font>
					</font><code class="literal">events</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">数据字典表</font>
					</font><code class="literal">mysql</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">。</font>
						<font style="vertical-align: inherit;">此表是在MySQL 8.0安装过程中创建的。</font>
						<font style="vertical-align: inherit;">如果要从早期版本升级到MySQL 8.0，请确保执行升级过程以确保您的系统数据库是最新的。</font>
						<font style="vertical-align: inherit;">请参见
						</font>
					</font><a class="xref" href="installing.html#upgrading" title="2.11升级MySQL">
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">第2.11节“升级MySQL”</font>
						</font>
					</a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">。
						</font>
					</font>
				</p>
				<h3><a name="idm140091571765936"></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">其他资源</font>
					</font>
				</h3>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										您可以在</font>
									<font style="vertical-align: inherit;">使用预定事件时</font>
									<font style="vertical-align: inherit;">找到使用的</font>
								</font><a class="ulink" href="https://forums.mysql.com/list.php?119" target="_top">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">MySQL事件调度程序用户论坛</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										对事件的使用有一些限制; </font>
									<font style="vertical-align: inherit;">请参见
									</font>
								</font><a class="xref" href="restrictions.html#stored-program-restrictions" title="C.1存储程序的限制">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第C.1节“存储程序的限制”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										事件的二进制日志记录按
									</font>
								</font><a class="xref" href="stored-objects.html#stored-programs-logging" title="24.7存储程序二进制日志">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第24.7节“存储程序二进制日志记录”中所述进行</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="events-overview"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.1事件调度程序概述</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571759072"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL事件是根据计划运行的任务。</font>
							<font style="vertical-align: inherit;">因此，我们有时将它们称为
							</font>
						</font><span class="emphasis"><em>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">预定</font>
								</font>
							</em></span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">事件。</font>
							<font style="vertical-align: inherit;">创建事件时，您正在创建一个命名数据库对象，该对象包含一个或多个SQL语句，这些SQL语句将以一个或多个定期间隔执行，从特定日期和时间开始和结束。</font>
							<font style="vertical-align: inherit;">从概念上讲，这类似于Unix </font>
						</font><code class="literal">crontab</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								（也称为</font>
						</font><span class="quote">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">“ </font>
							</font><span class="quote">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">cron作业</font>
								</font>
							</span>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;"> ”</font>
							</font>
						</span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）或Windows任务计划程序的概念。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								这种类型的计划任务有时也称为
							</font>
						</font><span class="quote">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">“ </font>
							</font><span class="quote">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">时间触发器</font>
								</font>
							</span>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;"> ”</font>
							</font>
						</span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，暗示这些是由时间推移触发的对象。</font>
							<font style="vertical-align: inherit;">虽然这基本上是正确的，但我们更喜欢使用术语
							</font>
						</font><span class="emphasis"><em>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">事件</font>
								</font>
							</em></span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">来避免与</font>
						</font><a class="xref" href="stored-objects.html#triggers" title="24.3使用触发器">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第24.3节“使用触发器”中</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">讨论的类型的触发器混淆</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">事件应该更具体地不与</font><span class="quote">
								<font style="vertical-align: inherit;">“ </font>
							</span><span class="quote"><span class="quote">
									<font style="vertical-align: inherit;">临时触发器</font>
								</span></span><span class="quote">
								<font style="vertical-align: inherit;"> ”</font>
							</span>
							<font style="vertical-align: inherit;">混淆</font>
						</font><span class="quote">
							<font style="vertical-align: inherit;"></font><span class="quote">
								<font style="vertical-align: inherit;"></font>
							</span>
							<font style="vertical-align: inherit;"></font>
						</span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">触发器是数据库对象，其语句是响应于在给定表上发生的特定类型的事件而执行的，（（已调度的）事件是响应于指定时间间隔的通过而执行其语句的对象。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								虽然SQL标准中没有提供事件调度的规定，但在其他数据库系统中也有先例，您可能会注意到这些实现与MySQL服务器中的实现之间存在一些相似之处。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL Events具有以下主要特性和属性：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在MySQL中，事件由其名称和分配给它的模式唯一标识。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											事件根据计划执行特定操作。</font>
										<font style="vertical-align: inherit;">此操作由一个SQL语句组成，</font>
									</font><a class="link" href="sql-syntax.html#begin-end" title="13.6.1 BEGIN ... END复合语句语法"><code class="literal">BEGIN
											...
											END</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">如果需要</font>
										<font style="vertical-align: inherit;">，该语句可以是</font>
										<font style="vertical-align: inherit;">块中</font>
										<font style="vertical-align: inherit;">的复合语句
										</font>
										<font style="vertical-align: inherit;">（请参见
										</font>
									</font><a class="xref" href="sql-syntax.html#sql-syntax-compound-statements" title="13.6复合语句语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.6节“复合语句语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">）。</font>
										<font style="vertical-align: inherit;">事件的时间可以是
										</font>
									</font><span class="firstterm">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">一次性</font>
										</font>
									</span>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或
										</font>
									</font><span class="firstterm">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">反复发作</font>
										</font>
									</span>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">一次性事件仅执行一次。</font>
										<font style="vertical-align: inherit;">周期性事件以固定间隔重复其动作，并且可以为周期性事件的时间表分配特定的开始日期和时间，结束日期和时间，两者或两者都不分配。</font>
										<font style="vertical-align: inherit;">（默认情况下，定期事件的计划在创建后立即开始，并且无限期地继续，直到它被禁用或删除。）
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果重复事件未在其调度间隔内终止，则结果可能是同时执行事件的多个实例。</font>
										<font style="vertical-align: inherit;">如果这是不合需要的，您应该建立一个机制来防止同时发生。</font>
										<font style="vertical-align: inherit;">例如，您可以使用
										</font>
									</font><a class="link" href="functions.html#function_get-lock"><code class="literal">GET_LOCK()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">函数，或行或表锁定。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											用户可以使用用于这些目的的SQL语句创建，修改和删除预定事件。</font>
										<font style="vertical-align: inherit;">语法无效的事件创建和修改语句失败，并显示相应的错误消息。</font>
									</font><span class="emphasis"><em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">用户可以在事件的动作中包括需要用户实际上没有的特权的语句</font>
											</font>
										</em></span>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">事件创建或修改语句成功，但事件的操作失败。</font>
										<font style="vertical-align: inherit;">有关详细</font>
									</font><a class="xref" href="stored-objects.html#events-privileges" title="24.4.6事件调度程序和MySQL权限">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">信息，</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">请参见</font><a class="xref" href="stored-objects.html#events-privileges"
										 title="24.4.6事件调度程序和MySQL权限">
											<font style="vertical-align: inherit;">第24.4.6节“事件调度程序和MySQL权限”</font>
										</a>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											可以使用SQL语句设置或修改事件的许多属性。</font>
										<font style="vertical-align: inherit;">这些属性包括事件的名称，计时，持久性（即，是否在其计划到期后保留），状态（启用或禁用），要执行的操作以及分配给它的模式。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.1.3节“ALTER EVENT语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											事件的默认定义者是创建事件的用户，除非事件已被更改，在这种情况下，定义者是发出</font>
									</font><a class="link" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法"><code class="literal">ALTER
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">影响该事件</font>
										<font style="vertical-align: inherit;">的最后一个</font>
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">的用户
										</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">任何具有</font>
									</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">定义事件的数据库特权的</font>
										<font style="vertical-align: inherit;">用户都可以修改
										</font>
										<font style="vertical-align: inherit;">事件。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="stored-objects.html#events-privileges" title="24.4.6事件调度程序和MySQL权限">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第24.4.6节“事件调度程序和MySQL权限”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											事件的操作语句可能包括存储例程中允许的大多数SQL语句。</font>
										<font style="vertical-align: inherit;">有关限制，请参见
										</font>
									</font><a class="xref" href="restrictions.html#stored-program-restrictions" title="C.1存储程序的限制">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第C.1节“存储程序的限制”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="events-configuration"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.2事件调度程序配置</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								事件由特殊</font>
						</font><span class="firstterm">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">事件调度程序线程执行</font>
							</font>
						</span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;"> ; </font>
							<font style="vertical-align: inherit;">当我们引用事件调度程序时，我们实际上是指这个线程。</font>
							<font style="vertical-align: inherit;">运行时，具有</font>
						</font><a class="link" href="security.html#priv_process"><code class="literal">PROCESS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">输出权限</font>
							<font style="vertical-align: inherit;">的用户可以看到事件调度程序线程及其当前状态</font>
						</font><a class="link" href="sql-syntax.html#show-processlist" title="13.7.6.29 SHOW PROCESSLIST语法"><code class="literal">SHOW
								PROCESSLIST</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，如下面的讨论所示。
							</font>
						</font>
					</p><a class="indexterm" name="idm140091571728144"></a><a class="indexterm" name="idm140091571726656"></a>
					<p><a name="events-event-scheduler-option"></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								全局</font>
						</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">系统变量确定是否在服务器上启用并运行事件调度程序。</font>
							<font style="vertical-align: inherit;">它具有这3个值中的一个，这会影响事件调度，如此处所述。</font>
							<font style="vertical-align: inherit;">默认是
							</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<code class="literal">ON</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：事件计划程序已启动; </font>
										<font style="vertical-align: inherit;">事件调度程序线程运行并执行所有计划事件。
										</font>
									</font>
								</p><a class="indexterm" name="idm140091571720496"></a>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											当事件调度程序是</font>
									</font><code class="literal">ON</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，事件调度程序线程在</font>
									</font><a class="link" href="sql-syntax.html#show-processlist" title="13.7.6.29 SHOW PROCESSLIST语法"><code
										 class="literal">SHOW PROCESSLIST</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">作为守护进程</font>
										<font style="vertical-align: inherit;">的输出中列出
										</font>
										<font style="vertical-align: inherit;">，其状态如下所示：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>SHOW PROCESSLIST\G</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
*************************** 1。排******************** *******</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     Id：1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   用户：root</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   主持人：localhost</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     db：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
命令：查询</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   时间：0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  状态：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   信息：show processlist</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
*************************** 2.排******************** *******</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     Id：2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   用户：event_scheduler</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   主持人：localhost</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     db：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
命令：守护进程</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   时间：3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  州：等待下一次激活</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   信息：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
2行（0.00秒）</font></font><font></font>
</pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											可以通过设置</font>
									</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">to
										</font>
										<font style="vertical-align: inherit;">的值来停止事件调度
										</font>
									</font><code class="literal">OFF</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">OFF</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：事件计划程序已停止。</font>
										<font style="vertical-align: inherit;">事件调度程序线程未运行，未在输出中显示</font>
									</font><a class="link" href="sql-syntax.html#show-processlist" title="13.7.6.29 SHOW PROCESSLIST语法"><code
										 class="literal">SHOW PROCESSLIST</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，并且未执行任何预定事件。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											当事件调度停止（</font>
									</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">是
										</font>
									</font><code class="literal">OFF</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">），它可以通过设置的值开始</font>
									</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">到
										</font>
									</font><code class="literal">ON</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">（见下一个项目。）
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">DISABLED</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：此值使事件计划程序不可操作。</font>
										<font style="vertical-align: inherit;">事件调度程序是
										</font>
									</font><code class="literal">DISABLED</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，事件调度程序线程不运行（因此不会出现在输出中
										</font>
									</font><a class="link" href="sql-syntax.html#show-processlist" title="13.7.6.29 SHOW PROCESSLIST语法"><code
										 class="literal">SHOW PROCESSLIST</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">）。</font>
										<font style="vertical-align: inherit;">此外，无法在运行时更改事件计划程序状态。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果事件调度程序状态尚未设置为
							</font>
						</font><code class="literal">DISABLED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，
							</font>
						</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">则可以在</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和</font>
							<font style="vertical-align: inherit;">之间切换</font>
						</font><code class="literal">OFF</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（使用
							</font>
						</font><a class="link" href="sql-syntax.html#set-variable" title="13.7.5.1变量赋值的SET语法"><code class="literal">SET</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。</font>
							<font style="vertical-align: inherit;">也可以使用</font>
						</font><code class="literal">0</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">的
							</font>
						</font><code class="literal">OFF</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，而</font>
						</font><code class="literal">1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">对于
							</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">设置该变量时。</font>
							<font style="vertical-align: inherit;">因此，可以在</font>
						</font><a class="link" href="programs.html#mysql" title="4.5.1 mysql  -  MySQL命令行客户端"><span class="command"><strong>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">mysql</font>
									</font>
								</strong></span></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								客户端中</font>
							<font style="vertical-align: inherit;">使用以下4个语句中的任何一个</font>
							<font style="vertical-align: inherit;">来打开事件调度程序：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SET GLOBAL event_scheduler = ON;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET @@ GLOBAL.event_scheduler = ON;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET GLOBAL event_scheduler = 1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET @@ GLOBAL.event_scheduler = 1;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								同样，这4个语句中的任何一个都可用于关闭事件调度程序：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SET GLOBAL event_scheduler = OFF;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET @@ GLOBAL.event_scheduler = OFF;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET GLOBAL event_scheduler = 0;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET @@ GLOBAL.event_scheduler = 0;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								虽然</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">与</font>
						</font><code class="literal">OFF</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">具有数字等同物，显示该值
							</font>
						</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">通过
							</font>
						</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或</font>
						</font><a class="link" href="sql-syntax.html#show-variables" title="13.7.6.39 SHOW VARIABLES语法"><code class="literal">SHOW
								VARIABLES</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">总是之一</font>
						</font><code class="literal">OFF</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，
							</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或</font>
						</font><code class="literal">DISABLED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font><span class="emphasis"><em><code class="literal">DISABLED</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">没有数字等价物</font>
								</font>
							</em></span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">出于这个原因，</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">并且
							</font>
						</font><code class="literal">OFF</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">通常是优选的超过
							</font>
						</font><code class="literal">1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和</font>
						</font><code class="literal">0</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">设置此变量时。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								请注意，尝试设置
							</font>
						</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">而不将其指定为全局变量会导致错误：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql &lt; </font><span class="errortext"><font style="vertical-align: inherit;">ERROR 1229（HY000）：变量'event_scheduler'是GLOBAL</font></span></font><strong class="userinput"><code>SET @@event_scheduler = OFF;</code></strong>
<span class="errortext"><font style="vertical-align: inherit;"></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
变量，应该用SET GLOBAL设置</font></font></span>
</pre>
					<div class="important" style="margin-left: 0.5in; margin-right: 0.5in;">

						<div class="admon-title">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									重要
								</font>
							</font>
						</div>
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									可以将事件调度程序设置为
								</font>
							</font><code class="literal">DISABLED</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">仅在服务器启动时。</font>
								<font style="vertical-align: inherit;">如果
								</font>
							</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">是
								</font>
							</font><code class="literal">ON</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">或</font>
							</font><code class="literal">OFF</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">，则无法</font>
							</font><code class="literal">DISABLED</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">在运行时</font>
								<font style="vertical-align: inherit;">将其设置为</font>
								<font style="vertical-align: inherit;">。</font>
								<font style="vertical-align: inherit;">此外，如果将事件计划程序设置为</font>
							</font><code class="literal">DISABLED</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">启动时，则无法更改</font>
							</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">运行时</font>
								<font style="vertical-align: inherit;">的值
								</font>
								<font style="vertical-align: inherit;">。
								</font>
							</font>
						</p>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要禁用事件调度程序，请使用以下两种方法之一：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											作为启动服务器时的命令行选项：
										</font>
									</font>
								</p>
								<pre data-lang="terminal" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">--event调度= DISABLED
</font></font></pre>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在服务器配置文件（</font>
									</font><code class="filename">my.cnf</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或</font>
									</font><code class="filename">my.ini</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">Windows系统）中，包括服务器将读取它的行（例如，在一</font>
									</font><code class="literal">[mysqld]</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">节中）：
										</font>
									</font>
								</p>
								<pre data-lang="ini" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">event_scheduler = DISABLED
</font></font></pre>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要启用事件计划程序，请在不使用</font>
						</font><a class="link" href="server-administration.html#option_mysqld_event-scheduler"><code class="option">--event-scheduler=DISABLED</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								命令行选项的</font>
							<font style="vertical-align: inherit;">情况下重新启动服务器
							</font>
							<font style="vertical-align: inherit;">，或者在删除或注释掉</font>
						</font><a class="link" href="server-administration.html#option_mysqld_event-scheduler"><code class="option">event-scheduler=DISABLED</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								服务器配置文件中</font>
							<font style="vertical-align: inherit;">包含的行后</font>
							<font style="vertical-align: inherit;">（如果适用）。</font>
							<font style="vertical-align: inherit;">或者，您可以</font>
							<font style="vertical-align: inherit;">在启动服务器时</font>
							<font style="vertical-align: inherit;">使用</font>
						</font><code class="literal">ON</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（或</font>
						</font><code class="literal">1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）或
							</font>
						</font><code class="literal">OFF</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（或</font>
						</font><code class="literal">0</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）代替
							</font>
						</font><code class="literal">DISABLED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">值。
							</font>
						</font>
					</p>
					<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">

						<div class="admon-title">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									注意
								</font>
							</font>
						</div>
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									当您可以发出事件操作语句
								</font>
							</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">设置为
								</font>
							</font><code class="literal">DISABLED</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">。</font>
								<font style="vertical-align: inherit;">在这种情况下不会产生警告或错误（前提是这些语句本身有效）。</font>
								<font style="vertical-align: inherit;">但是，在将此变量设置为</font>
							</font><code class="literal">ON</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">（或
								</font>
							</font><code class="literal">1</code>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">）</font>
								<font style="vertical-align: inherit;">之前，无法执行预定事件</font>
								<font style="vertical-align: inherit;">。</font>
								<font style="vertical-align: inherit;">完成此操作后，事件调度程序线程将执行其调度条件满足的所有事件。
								</font>
							</font>
						</p>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								使用该</font>
						</font><a class="link" href="server-administration.html#option_mysqld_skip-grant-tables"><code class="option">--skip-grant-tables</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">选项</font>
							<font style="vertical-align: inherit;">启动MySQL服务器
							</font>
							<font style="vertical-align: inherit;">会导致
							</font>
						</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">设置为
							</font>
						</font><code class="literal">DISABLED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，覆盖命令行</font>
						</font><code class="filename">my.cnf</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><code class="filename">my.ini</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">文件</font>
							<font style="vertical-align: inherit;">中的任何其他值集</font>
							<font style="vertical-align: inherit;">（Bug＃26807）。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								有关用于创建，更改和删除事件的SQL语句，请参见
							</font>
						</font><a class="xref" href="stored-objects.html#events-syntax" title="24.4.3事件语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第24.4.3节“事件语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL </font>
						</font><a class="link" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表"><code
							 class="literal">EVENTS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">在</font>
						</font><code class="literal">INFORMATION_SCHEMA</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">数据库中</font>
							<font style="vertical-align: inherit;">提供了一个</font>
							<font style="vertical-align: inherit;">表
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">可以查询此表以获取有关已在服务器上定义的预定事件的信息。</font>
							<font style="vertical-align: inherit;">有关更多信息</font>
						</font><a class="xref" href="stored-objects.html#events-metadata" title="24.4.4事件元数据">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">，</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">请参见</font><a class="xref" href="stored-objects.html#events-metadata"
							 title="24.4.4事件元数据">
								<font style="vertical-align: inherit;">第24.4.4节“事件元数据”</font>
							</a>
							<font style="vertical-align: inherit;">和</font>
						</font><a class="xref" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第25.10节“INFORMATION_SCHEMA事件表”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								有关事件调度​​和MySQL权限系统的信息，请参见</font>
						</font><a class="xref" href="stored-objects.html#events-privileges" title="24.4.6事件调度程序和MySQL权限">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第24.4.6节“事件调度程序和MySQL权限”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="events-syntax"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.3事件语法</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571637232"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL提供了几个用于处理预定事件的SQL语句：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用该</font>
									</font><a class="link" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法"><code class="literal">CREATE
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">定义新事件</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.1.13节“创建事件语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											可以通过</font>
									</font><a class="link" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法"><code class="literal">ALTER
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">更改现有事件的定义</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.1.3节“ALTER EVENT语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											当不再需要或不需要预定事件时，可以使用该</font>
									</font><a class="link" href="sql-syntax.html#drop-event" title="13.1.25 DROP EVENT语法"><code class="literal">DROP
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">通过其定义者从服务器中删除它
										</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="sql-syntax.html#drop-event" title="13.1.25 DROP EVENT语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.1.25节“DROP EVENT语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">事件是否持续超过其计划结束还取决于其</font>
									</font><code class="literal">ON
										COMPLETION</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">条款（如果有）。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.1.13节“创建事件语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											任何具有</font>
									</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">定义事件的数据库特权的</font>
										<font style="vertical-align: inherit;">用户都可以删除
										</font>
										<font style="vertical-align: inherit;">事件。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="stored-objects.html#events-privileges" title="24.4.6事件调度程序和MySQL权限">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第24.4.6节“事件调度程序和MySQL权限”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="events-metadata"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.4事件元数据</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571621344"></a><a class="indexterm" name="idm140091571619856"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								有关事件的元数据可以通过以下方式获得：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											查询</font>
										<font style="vertical-align: inherit;">数据库</font>
									</font><a class="link" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表"><code
										 class="literal">EVENTS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">表
										</font>
									</font><code class="literal">INFORMATION_SCHEMA</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第25.10节“INFORMATION_SCHEMA事件表”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用该</font>
									</font><a class="link" href="sql-syntax.html#show-create-event" title="13.7.6.7 SHOW CREATE EVENT语法"><code
										 class="literal">SHOW CREATE EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											声明。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#show-create-event" title="13.7.6.7 SHOW CREATE EVENT语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.7节“显示创建事件语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用该</font>
									</font><a class="link" href="sql-syntax.html#show-events" title="13.7.6.18显示事件语法"><code class="literal">SHOW
											EVENTS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">声明。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#show-events" title="13.7.6.18显示事件语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.18节“显示事件语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<span class="bold"><strong>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">事件调度程序时间表示</font>
								</font>
							</strong></span>
					</p><a class="indexterm" name="idm140091571607520"></a><a class="indexterm" name="idm140091571606032"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL中的每个会话都有一个会话时区（STZ）。</font>
							<font style="vertical-align: inherit;">这是</font>
							<font style="vertical-align: inherit;">会话开始时</font>
						</font><a class="link" href="server-administration.html#sysvar_time_zone"><code class="literal">time_zone</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">从服务器的全局</font>
						</font><a class="link" href="server-administration.html#sysvar_time_zone"><code class="literal">time_zone</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">值</font>
							<font style="vertical-align: inherit;">初始化</font>
							<font style="vertical-align: inherit;">的会话</font>
							<font style="vertical-align: inherit;">值，
							</font>
							<font style="vertical-align: inherit;">但可以在会话期间更改。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">执行</font>
						</font><a class="link" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法"><code class="literal">CREATE
								EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">or
							</font>
						</font><a class="link" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法"><code class="literal">ALTER
								EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">
								时的当前会话时区
							</font>
							<font style="vertical-align: inherit;">用于解释事件定义中指定的时间。</font>
							<font style="vertical-align: inherit;">这成为事件时区（ETZ）; </font>
							<font style="vertical-align: inherit;">也就是说，用于事件调度的时区，它在执行时在事件中生效。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								对于在事件信息表示
							</font>
						</font><code class="literal">mysql.event</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表中，
							</font>
						</font><code class="literal">execute_at</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，</font>
						</font><code class="literal">starts</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，和
							</font>
						</font><code class="literal">ends</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">时间被转换为UTC和与事件的时区一起存储。</font>
							<font style="vertical-align: inherit;">这使得事件执行能够按照定义继续执行，而不管服务器时区或夏令时效果的任何后续更改。</font>
							<font style="vertical-align: inherit;">该
							</font>
						</font><code class="literal">last_executed</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">时间也存储在UTC。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果您从中选择信息</font>
						</font><code class="literal">mysql.event</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，则刚刚提到的时间将被检索为UTC值。</font>
							<font style="vertical-align: inherit;">这些时间也可以通过从</font>
						</font><a class="link" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表"><code
							 class="literal">INFORMATION_SCHEMA.EVENTS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表中</font>
							<font style="vertical-align: inherit;">选择
							</font>
							<font style="vertical-align: inherit;">或从中获得</font>
						</font><a class="link" href="sql-syntax.html#show-events" title="13.7.6.18显示事件语法"><code class="literal">SHOW
								EVENTS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，但它们被报告为ETZ值。</font>
							<font style="vertical-align: inherit;">从这些来源获得的其他时间表示事件创建或最后更改的时间; </font>
							<font style="vertical-align: inherit;">这些显示为STZ值。</font>
							<font style="vertical-align: inherit;">下表总结了事件时间的表示。
							</font>
						</font>
					</p>
					<div class="informaltable">
						<table summary="Summary of event time representation (as UTC, EZT, or STZ values) from mysql.event, INFORMATION_SCHEMA.EVENTS, and SHOW EVENTS.">
							<colgroup>
								<col width="25%">
								<col width="25%">
								<col width="25%">
								<col width="25%">
							</colgroup>
							<thead>
								<tr>
									<th scope="col">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">值</font>
										</font>
									</th>
									<th scope="col"><code class="literal">mysql.event</code></th>
									<th scope="col"><a class="link" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表"><code
											 class="literal">INFORMATION_SCHEMA.EVENTS</code></a></th>
									<th scope="col"><a class="link" href="sql-syntax.html#show-events" title="13.7.6.18显示事件语法"><code class="literal">SHOW
												EVENTS</code></a></th>
								</tr>
							</thead>
							<tbody>
								<tr>
									<td scope="row">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">执行于</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">世界标准时间</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
								</tr>
								<tr>
									<td scope="row">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">启动</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">世界标准时间</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
								</tr>
								<tr>
									<td scope="row">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">完</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">世界标准时间</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
								</tr>
								<tr>
									<td scope="row">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">最后执行</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">世界标准时间</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">ETZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">N / A</font>
										</font>
									</td>
								</tr>
								<tr>
									<td scope="row">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">创建</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">STZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">STZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">N / A</font>
										</font>
									</td>
								</tr>
								<tr>
									<td scope="row">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">最后改变了</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">STZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">STZ</font>
										</font>
									</td>
									<td>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">N / A</font>
										</font>
									</td>
								</tr>
							</tbody>
						</table>
					</div>

				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="events-status-info"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.5事件调度程序状态</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571552432"></a><a class="indexterm" name="idm140091571550928"></a><a class="indexterm"
					 name="idm140091571549856"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								事件调度程序将有关事件执行的信息写入MySQL服务器的错误日志，该信息以错误或警告终止。</font>
							<font style="vertical-align: inherit;">有关</font>
						</font><a class="xref" href="stored-objects.html#events-privileges" title="24.4.6事件调度程序和MySQL权限">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">示例，</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">请参见</font><a class="xref" href="stored-objects.html#events-privileges"
							 title="24.4.6事件调度程序和MySQL权限">
								<font style="vertical-align: inherit;">第24.4.6节“事件调度程序和MySQL权限”</font>
							</a>
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要获取有关事件调度​​程序状态的信息以进行调试和故障排除，请运行</font>
						</font><a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin  - 管理MySQL服务器的客户端"><span class="command"><strong>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">mysqladmin debug</font>
									</font>
								</strong></span></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（请参见</font>
						</font><a class="xref" href="programs.html#mysqladmin" title="4.5.2 mysqladmin  - 管理MySQL服务器的客户端">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第4.5.2节“ </font>
							</font><span class="command"><strong>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">mysqladmin</font>
									</font>
								</strong></span>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;"> - 管理MySQL服务器的客户端”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）; </font>
							<font style="vertical-align: inherit;">运行此命令后，服务器的错误日志包含与事件调度程序相关的输出，类似于此处显示的内容：
							</font>
						</font>
					</p>
					<pre data-lang="none" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">活动状态：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
LLA =最后锁定在LUA =最后解锁时间</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
WOC =等待条件DL =数据锁定</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
事件调度程序状态：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
状态：INITIALIZED</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
线程ID：0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
LLA：init_scheduler：313</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
LUA：init_scheduler：318</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
WOC：没有</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
工人：0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
执行：0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
数据已锁定：否</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
事件队列状态：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
元素数：1</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
数据已锁定：否</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
试图锁定：没有</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
LLA：init_queue：148</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
LUA：init_queue：168</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
WOC：没有</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
下一次激活：0000-00-00 00：00：00</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在作为事件调度程序执行的事件的一部分发生的语句中，诊断消息（不仅是错误，还包括警告）将写入错误日志，并在Windows上写入应用程序事件日志。</font>
							<font style="vertical-align: inherit;">对于频繁执行的事件，可能会导致许多记录的消息。</font>
							<font style="vertical-align: inherit;">例如，对于</font>
							<font style="vertical-align: inherit;">语句，如果查询不返回任何行，则会发生错误代码为1329的警告（</font>
							<font style="vertical-align: inherit;">），并且变量值保持不变。</font>
							<font style="vertical-align: inherit;">如果查询返回多行，则发生错误1172（</font>
							<font style="vertical-align: inherit;">）。</font>
							<font style="vertical-align: inherit;">对于任何一种情况，您都可以通过声明条件处理程序来避免记录警告; </font>
							<font style="vertical-align: inherit;">请参见
							</font><a class="xref" href="sql-syntax.html#declare-handler" title="13.6.7.2 DECLARE ... HANDLER语法">
								<font style="vertical-align: inherit;">第13.6.7.2节“DECLARE ... HANDLER语法”</font>
							</a>
						</font><code class="literal">SELECT ... INTO
							<em class="replaceable"><code>var_list</code></em></code>
						<font style="vertical-align: inherit;"></font><code class="literal">No data</code>
						<font style="vertical-align: inherit;"></font><code class="literal">Result consisted of more than one row</code>
						<font style="vertical-align: inherit;"></font><a class="xref" href="sql-syntax.html#declare-handler" title="13.6.7.2 DECLARE ... HANDLER语法">
							<font style="vertical-align: inherit;"></font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">对于可能检索多行的语句，另一种策略是使用</font>
						</font><code class="literal">LIMIT
							1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">将结果集限制为单行。
							</font>
						</font>
					</p>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="events-privileges"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.4.6事件调度程序和MySQL权限</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571536896"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要启用或禁用已调度事件的执行，必须设置全局
							</font>
						</font><a class="link" href="server-administration.html#sysvar_event_scheduler"><code class="literal">event_scheduler</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">系统变量的值。</font>
							<font style="vertical-align: inherit;">这需要足以设置全局系统变量的权限。</font>
							<font style="vertical-align: inherit;">请参见</font>
						</font><a class="xref" href="server-administration.html#system-variable-privileges" title="5.1.9.1系统变量权限">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第5.1.9.1节“系统变量权限”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								该</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限控制事件的创建，修改和删除。</font>
							<font style="vertical-align: inherit;">可以使用此权限</font>
						</font><a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT语法"><code class="literal">GRANT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">例如，此</font>
						</font><a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT语法"><code class="literal">GRANT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句赋予</font>
							<font style="vertical-align: inherit;">用户
							</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">指定的模式</font>
							<font style="vertical-align: inherit;">的</font>
							<font style="vertical-align: inherit;">特权</font>
							<font style="vertical-align: inherit;">：
							</font>
						</font><code class="literal">myschema</code>
						<font style="vertical-align: inherit;"></font><code class="literal">jon@ghidora</code>
						<font style="vertical-align: inherit;"></font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">关于myschema的重大事件。* to jon @ ghidora;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								（我们假设此用户帐户已存在，并且我们希望它保持不变。）
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要授予此用户</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								对所有模式</font>
							<font style="vertical-align: inherit;">的</font>
							<font style="vertical-align: inherit;">特权，请使用以下语句：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">授予活动*。*至jon @ ghidora;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								该</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">特权具有全局或模式级范围。</font>
							<font style="vertical-align: inherit;">因此，尝试在单个表上授予它会导致错误，如下所示：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font><span class="errortext"><font style="vertical-align: inherit;">ERROR 1144（42000）：非法GRANT / REVOKE命令; </font></span><span class="errortext"><font style="vertical-align: inherit;">请</font></span></font><strong class="userinput"><code>GRANT EVENT ON myschema.mytable TO jon@ghidora;</code></strong>
<span class="errortext"><font style="vertical-align: inherit;"></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
请参阅手册以了解可以使用的权限</font></font></span>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								重要的是要理解事件是以其定义者的特权执行的，并且它不能执行其定义者没有必要特权的任何操作。</font>
							<font style="vertical-align: inherit;">例如，假设</font>
						</font><code class="literal">jon@ghidora</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">有
							</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限
							</font>
						</font><code class="literal">myschema</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">还假设此用户具有</font>
							<font style="vertical-align: inherit;">此架构</font>
							<font style="vertical-align: inherit;">的
							</font>
						</font><a class="link" href="security.html#priv_select"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限
							</font>
						</font><code class="literal">myschema</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，但没有其他权限。</font>
							<font style="vertical-align: inherit;">可以</font>
						</font><code class="literal">jon@ghidora</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">创建一个新事件，例如：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">创建事件e_store_ts</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    按照时间表</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      每10秒</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    做</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      INSERT INTO myschema.mytable VALUES（UNIX_TIMESTAMP（））;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								用户等待一分钟左右，然后执行
							</font>
						</font><code class="literal">SELECT * FROM mytable;</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">查询，期望在表中看到几个新行。</font>
							<font style="vertical-align: inherit;">相反，该表是空的。</font>
							<font style="vertical-align: inherit;">由于用户没有</font>
						</font><a class="link" href="security.html#priv_insert"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								相关表</font>
							<font style="vertical-align: inherit;">的</font>
							<font style="vertical-align: inherit;">权限，因此该事件无效。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果检查MySQL错误日志（</font>
						</font><code class="filename"><em class="replaceable"><code>hostname</code></em>.err</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">），您可以看到事件正在执行，但它尝试执行的操作失败：
							</font>
						</font>
					</p>
					<pre data-lang="none" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">2013-09-24T12：41：31.261992Z 25 [ERROR]事件调度程序：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[jon @ ghidora] [cookbook.e_store_ts] INSERT命令被拒绝给用户</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
表'mytable'''jon'@'ghidora'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
2013-09-24T12：41：31.262022Z 25 [注意]事件调度程序：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[jon @ ghidora]。[myschema.e_store_ts]事件执行失败。</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
2013-09-24T12：41：41.271796Z 26 [ERROR]事件调度程序：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[jon @ ghidora] [cookbook.e_store_ts] INSERT命令被拒绝给用户</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
表'mytable'''jon'@'ghidora'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
2013-09-24T12：41：41.272761Z 26 [注意]事件调度程序：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
[jon @ ghidora]。[myschema.e_store_ts]事件执行失败。</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								由于此用户很可能无法访问错误日志，因此可以通过直接执行它来验证事件的操作语句是否有效：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font><span class="errortext"><font style="vertical-align: inherit;">ERROR 1142（42000）：拒绝用户INSERT命令</font></span></font><strong class="userinput"><code>INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());</code></strong>
<span class="errortext"><font style="vertical-align: inherit;"></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
表'mytable'''jon'@'ghidora'</font></font></span>
</pre><a class="indexterm" name="idm140091571502384"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								检查
							</font>
						</font><a class="link" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表"><code
							 class="literal">INFORMATION_SCHEMA.EVENTS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表显示</font>
						</font><code class="literal">e_store_ts</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">存在并已启用，但其
							</font>
						</font><code class="literal">LAST_EXECUTED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">列为
							</font>
						</font><code class="literal">NULL</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>SELECT * FROM INFORMATION_SCHEMA.EVENTS</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     &gt;      </font></font><strong class="userinput"><code>WHERE EVENT_NAME='e_store_ts'</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
     &gt;     </font></font><strong class="userinput"><code>AND EVENT_SCHEMA='myschema'\G</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
*************************** 1。排******************** *******</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   EVENT_CATALOG：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    EVENT_SCHEMA：myschema</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      EVENT_NAME：e_store_ts</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         DEFINER：jon @ ghidora</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      EVENT_BODY：SQL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
EVENT_DEFINITION：INSERT INTO myschema.mytable VALUES（UNIX_TIMESTAMP（））</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      EVENT_TYPE：RECURRING</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      EXECUTE_AT：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  INTERVAL_VALUE：5</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  INTERVAL_FIELD：第二</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
        SQL_MODE：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
          STARTS：0000-00-00 00:00:00</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
            ENDS：0000-00-00 00:00:00</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
          状态：已启用</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   ON_COMPLETION：NOT PRESERVE</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
         创建时间：2006-02-09 22:36:06</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    LAST_ALTERED：2006-02-09 22:36:06</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   LAST_EXECUTED：NULL</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
   EVENT_COMMENT：</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
1排（0.00秒）</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要取消该</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限，请使用该</font>
						</font><a class="link" href="sql-syntax.html#revoke" title="13.7.1.8 REVOKE语法"><code class="literal">REVOKE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句。</font>
							<font style="vertical-align: inherit;">在此示例中，</font>
							<font style="vertical-align: inherit;">将从</font>
							<font style="vertical-align: inherit;">用户帐户中</font>
							<font style="vertical-align: inherit;">删除
							</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">架构</font>
							<font style="vertical-align: inherit;">的</font>
							<font style="vertical-align: inherit;">权限</font>
							<font style="vertical-align: inherit;">：
							</font>
						</font><code class="literal">myschema</code>
						<font style="vertical-align: inherit;"></font><code class="literal">jon@ghidora</code>
						<font style="vertical-align: inherit;"></font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">在myschema上重播活动。*来自jon @ ghidora;
</font></font></pre>
					<div class="important" style="margin-left: 0.5in; margin-right: 0.5in;">

						<div class="admon-title">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									重要
								</font>
							</font>
						</div>
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									撤消</font>
							</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">用户</font>
								<font style="vertical-align: inherit;">的</font>
								<font style="vertical-align: inherit;">权限不会删除或禁用该用户可能创建的任何事件。
								</font>
							</font>
						</p>
						<p>
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">
									由于重命名或删除创建事件的用户，不会迁移或删除事件。
								</font>
							</font>
						</p>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								假设用户</font>
						</font><code class="literal">jon@ghidora</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">已被授予</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><a class="link" href="security.html#priv_insert"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">特权上的
							</font>
						</font><code class="literal">myschema</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">架构。</font>
							<font style="vertical-align: inherit;">然后，此用户创建以下事件：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">创建事件e_insert</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    按照时间表</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      每7秒</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    做</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      INSERT INTO myschema.mytable;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								创建此事件后，</font>
						</font><code class="literal">root</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">撤消该</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限
							</font>
						</font><code class="literal">jon@ghidora</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">但是，
							</font>
						</font><code class="literal">e_insert</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">继续执行，</font>
						</font><code class="literal">mytable</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">每7秒</font>
							<font style="vertical-align: inherit;">插入一个新行</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">如果</font>
						</font><code class="literal">root</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">发布以下任何一种陈述，情况也是如此：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<code class="literal">DROP USER jon@ghidora;</code>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">RENAME USER jon@ghidora TO
										someotherguy@ghidora;</code>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								您可以通过</font>
							<font style="vertical-align: inherit;">在发出</font>
							<font style="vertical-align: inherit;">或
							</font>
							<font style="vertical-align: inherit;">声明</font>
							<font style="vertical-align: inherit;">之前和之后</font>
							<font style="vertical-align: inherit;">检查</font>
						</font><code class="literal">mysql.event</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表（在本节后面讨论）或
							</font>
						</font><a class="link" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表"><code
							 class="literal">INFORMATION_SCHEMA.EVENTS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">表（请参见
							</font>
						</font><a class="xref" href="information-schema.html#events-table" title="25.10 INFORMATION_SCHEMA事件表">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第25.10节“INFORMATION_SCHEMA事件表”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）
							</font>
							<font style="vertical-align: inherit;">来验证这是否成立
							</font>
							<font style="vertical-align: inherit;">。
							</font>
						</font><a class="link" href="sql-syntax.html#drop-user" title="13.7.1.5 DROP USER语法"><code class="literal">DROP
								USER</code></a>
						<font style="vertical-align: inherit;"></font><a class="link" href="sql-syntax.html#rename-user" title="13.7.1.7 RENAME USER语法"><code
							 class="literal">RENAME USER</code></a>
						<font style="vertical-align: inherit;"></font>
					</p><a class="indexterm" name="idm140091571464208"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								事件定义存储在</font>
						</font><code class="literal">mysql.event</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								表中。</font>
							<font style="vertical-align: inherit;">要删除由其他用户帐户创建的事件，MySQL
							</font>
						</font><code class="literal">root</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">用户（或具有必要权限的其他用户）可以从此表中删除行。</font>
							<font style="vertical-align: inherit;">例如，要删除</font>
						</font><code class="literal">e_insert</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">前面显示</font>
							<font style="vertical-align: inherit;">的事件</font>
							<font style="vertical-align: inherit;">，
							</font>
						</font><code class="literal">root</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">可以使用以下语句：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">从mysql.event删除</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    WHERE db ='myschema'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
      AND name ='e_insert';</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								从</font>
						</font><code class="literal">mysql.event</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								表中</font>
							<font style="vertical-align: inherit;">删除行时，匹配事件名称和数据库模式名称非常重要</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">这是因为不同模式中可能存在同名的不同事件。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								用户</font>
						</font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">权限存储在</font>
							<font style="vertical-align: inherit;">和</font>
							<font style="vertical-align: inherit;">
								表</font>
							<font style="vertical-align: inherit;">的</font>
						</font><code class="literal">Event_priv</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">列中
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">在这两种情况下，此列都包含其中一个值' </font>
							<font style="vertical-align: inherit;">'或' </font>
							<font style="vertical-align: inherit;">'。</font>
							<font style="vertical-align: inherit;">' </font>
							<font style="vertical-align: inherit;">'是默认值。
							</font>
							<font style="vertical-align: inherit;">仅当该用户具有全局</font>
							<font style="vertical-align: inherit;">权限（即，如果使用该权限时</font>
							<font style="vertical-align: inherit;">）</font>
							<font style="vertical-align: inherit;">，则为</font>
							<font style="vertical-align: inherit;">给定用户</font>
							<font style="vertical-align: inherit;">设置为' </font>
							<font style="vertical-align: inherit;">' </font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">对于模式级
							</font>
							<font style="vertical-align: inherit;">权限，
							</font>
							<font style="vertical-align: inherit;">创建一个行
							</font>
							<font style="vertical-align: inherit;">并将该行的</font>
							<font style="vertical-align: inherit;">列</font>
							<font style="vertical-align: inherit;">设置
							</font>
							<font style="vertical-align: inherit;">为模式的名称，列为</font>
							<font style="vertical-align: inherit;">用户名称</font>
							<font style="vertical-align: inherit;">的
							</font>
							<font style="vertical-align: inherit;">列，以及
							</font>
						</font><code class="literal">mysql.user</code>
						<font style="vertical-align: inherit;"></font><code class="literal">mysql.db</code>
						<font style="vertical-align: inherit;"></font><code class="literal">Y</code>
						<font style="vertical-align: inherit;"></font><code class="literal">N</code>
						<font style="vertical-align: inherit;"></font><code class="literal">N</code>
						<font style="vertical-align: inherit;"></font><code class="literal">mysql.user.Event_priv</code>
						<font style="vertical-align: inherit;"></font><code class="literal">Y</code>
						<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;"></font><code class="literal">GRANT EVENT ON
							*.*</code>
						<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_event"><code class="literal">EVENT</code></a>
						<font style="vertical-align: inherit;"></font><a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT语法"><code
							 class="literal">GRANT</code></a>
						<font style="vertical-align: inherit;"></font><code class="literal">mysql.db</code>
						<font style="vertical-align: inherit;"></font><code class="literal">Db</code>
						<font style="vertical-align: inherit;"></font><code class="literal">User</code>
						<font style="vertical-align: inherit;"></font><code class="literal">Event_priv</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">列设置为'</font>
						</font><code class="literal">Y</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">”。</font>
							<font style="vertical-align: inherit;">永远不需要直接操作这些表，因为</font>
							<font style="vertical-align: inherit;">语句对它们执行所需的操作。
							</font>
						</font><a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT语法"><code class="literal">GRANT
								EVENT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;"> 和 </font>
						</font><code class="literal">REVOKE EVENT</code>
					</p><a class="indexterm" name="idm140091571439648"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								五个状态变量提供与事件相关的操作的计数（但</font>
						</font><span class="emphasis"><em>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">不</font>
								</font>
							</em></span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">包括事件执行的语句;请参见</font>
						</font><a class="xref" href="restrictions.html#stored-program-restrictions" title="C.1存储程序的限制">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第C.1节“存储程序的限制”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。</font>
							<font style="vertical-align: inherit;">这些是：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<code class="literal">Com_create_event</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：</font>
									</font><a class="link" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法"><code class="literal">CREATE
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">自上次服务器重新启动以来执行</font>
										<font style="vertical-align: inherit;">的</font>
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">数
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">Com_alter_event</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：</font>
									</font><a class="link" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法"><code class="literal">ALTER
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">自上次服务器重新启动以来执行</font>
										<font style="vertical-align: inherit;">的</font>
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">数
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">Com_drop_event</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：</font>
									</font><a class="link" href="sql-syntax.html#drop-event" title="13.1.25 DROP EVENT语法"><code class="literal">DROP
											EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">自上次服务器重新启动以来执行</font>
										<font style="vertical-align: inherit;">的</font>
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">数
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">Com_show_create_event</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：</font>
									</font><a class="link" href="sql-syntax.html#show-create-event" title="13.7.6.7 SHOW CREATE EVENT语法"><code
										 class="literal">SHOW CREATE EVENT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">自上次服务器重新启动以来执行</font>
										<font style="vertical-align: inherit;">的</font>
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">数
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">Com_show_events</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：</font>
									</font><a class="link" href="sql-syntax.html#show-events" title="13.7.6.18显示事件语法"><code class="literal">SHOW
											EVENTS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">自上次服务器重新启动以来执行</font>
										<font style="vertical-align: inherit;">的</font>
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">数
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								您可以通过运行语句一次查看所有这些的当前值</font>
						</font><code class="literal">SHOW STATUS LIKE
							'%event%';</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
				</div>

			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="views"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.5使用视图</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<div class="toc">
					<dl class="toc"><dt><span class="section"><a href="stored-objects.html#view-syntax">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.1查看语法</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-algorithms">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.2视图处理算法</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-updatability">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.3可更新和可插入的视图</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-check-option">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.4带有检查选项的视图子句</font>
									</font>
								</a></span></dt><dt><span class="section"><a href="stored-objects.html#view-metadata">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.5查看元数据</font>
									</font>
								</a></span></dt></dl>
				</div>
				<a class="indexterm" name="idm140091571419648"></a>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							MySQL支持视图，包括可更新视图。</font>
						<font style="vertical-align: inherit;">视图是存储的查询，在调用时会生成结果集。</font>
						<font style="vertical-align: inherit;">视图充当虚拟表。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							以下讨论描述了创建和删除视图的语法，并显示了如何使用它们的一些示例。
						</font>
					</font>
				</p>
				<h3><a name="idm140091571417488"></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">其他资源</font>
					</font>
				</h3>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										您可以在使用</font>
								</font><a class="ulink" href="https://forums.mysql.com/list.php?100" target="_top">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">视图</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">时</font>
									<font style="vertical-align: inherit;">找到使用的</font><a class="ulink" href="https://forums.mysql.com/list.php?100"
									 target="_top">
										<font style="vertical-align: inherit;">视图用户论坛</font>
									</a>
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										有关MySQL中视图的一些常见问题的解答，请参见</font>
								</font><a class="xref" href="faqs.html#faqs-views" title="A.6 MySQL 8.0 FAQ：视图">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第A.6节“MySQL 8.0常见问题解答：视图”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										对视图的使用有一些限制; </font>
									<font style="vertical-align: inherit;">请参见
									</font>
								</font><a class="xref" href="restrictions.html#view-restrictions" title="C.5对视图的限制">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第C.5节“视图限制”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="view-syntax"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.1查看语法</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								该</font>
						</font><a class="link" href="sql-syntax.html#create-view" title="13.1.23创建视图语法"><code class="literal">CREATE VIEW</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句创建一个新视图（请参见</font>
						</font><a class="xref" href="sql-syntax.html#create-view" title="13.1.23创建视图语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.23节“创建视图语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。</font>
							<font style="vertical-align: inherit;">要更改视图的定义或删除视图，请使用
							</font>
						</font><a class="link" href="sql-syntax.html#alter-view" title="13.1.11 ALTER VIEW语法"><code class="literal">ALTER
								VIEW</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（请参见
							</font>
						</font><a class="xref" href="sql-syntax.html#alter-view" title="13.1.11 ALTER VIEW语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.11节“ALTER VIEW语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）或</font>
						</font><a class="link" href="sql-syntax.html#drop-view" title="13.1.35 DROP VIEW语法"><code class="literal">DROP
								VIEW</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（参见</font>
						</font><a class="xref" href="sql-syntax.html#drop-view" title="13.1.35 DROP VIEW语法">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.35节“DROP VIEW语法”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								可以从多种</font>
						</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">创建视图
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">它可以引用基表或其他视图。</font>
							<font style="vertical-align: inherit;">它可以使用连接
							</font>
						</font><a class="link" href="sql-syntax.html#union" title="13.2.10.3 UNION语法"><code class="literal">UNION</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和子查询。</font>
							<font style="vertical-align: inherit;">该
							</font>
						</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">甚至不需要引用任何表。</font>
							<font style="vertical-align: inherit;">以下示例定义了一个视图，该视图从另一个表中选择两列，以及从这些列计算的表达式：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font></font><strong class="userinput"><code>CREATE TABLE t (qty INT, price INT);</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font></font><strong class="userinput"><code>INSERT INTO t VALUES(3, 50), (5, 60);</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font></font><strong class="userinput"><code>CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt;</font></font><strong class="userinput"><code>SELECT * FROM v;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ + ------- ------- + +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">数量| </font><font style="vertical-align: inherit;">价格| </font><font style="vertical-align: inherit;">价值|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ + ------- ------- + +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">3 | </font><font style="vertical-align: inherit;">50 | </font><font style="vertical-align: inherit;">150 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">5 | </font><font style="vertical-align: inherit;">60 | </font><font style="vertical-align: inherit;">300 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ + ------- ------- + +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>SELECT * FROM v WHERE qty = 5;</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ + ------- ------- + +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">数量| </font><font style="vertical-align: inherit;">价格| </font><font style="vertical-align: inherit;">价值|</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ + ------- ------- + +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">5 | </font><font style="vertical-align: inherit;">60 | </font><font style="vertical-align: inherit;">300 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ ------ + ------- ------- + +</font></font><font></font>
</pre>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="view-algorithms"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.2视图处理算法</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571393568"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								可选</font>
						</font><code class="literal">ALGORITHM</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">子句
							</font>
						</font><a class="link" href="sql-syntax.html#create-view" title="13.1.23创建视图语法"><code class="literal">CREATE VIEW</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或是
							</font>
						</font><a class="link" href="sql-syntax.html#alter-view" title="13.1.11 ALTER VIEW语法"><code class="literal">ALTER
								VIEW</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">标准SQL的MySQL扩展。</font>
							<font style="vertical-align: inherit;">它会影响MySQL处理视图的方式。
							</font>
						</font><code class="literal">ALGORITHM</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">三个值：
							</font>
						</font><code class="literal">MERGE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，</font>
						</font><code class="literal">TEMPTABLE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><code class="literal">UNDEFINED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于</font>
									</font><code class="literal">MERGE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，引用视图和视图定义的语句的文本被合并，以便视图定义的部分替换语句的相应部分。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于</font>
									</font><code class="literal">TEMPTABLE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，视图的结果将被检索到临时表中，然后用于执行该语句。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											因为</font>
									</font><code class="literal">UNDEFINED</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，MySQL选择使用哪种算法。</font>
										<font style="vertical-align: inherit;">它喜欢</font>
									</font><code class="literal">MERGE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">在
										</font>
									</font><code class="literal">TEMPTABLE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">如果可能的话，因为
										</font>
									</font><code class="literal">MERGE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">通常是更高效的并且因为如果使用临时表的视图不能更新。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果不存在</font>
									</font><code class="literal">ALGORITHM</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">子句，则默认算法由</font>
										<font style="vertical-align: inherit;">系统变量</font>
										<font style="vertical-align: inherit;">的</font>
									</font><code class="literal">derived_merge</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">标志
										</font>
										<font style="vertical-align: inherit;">值确定
										</font>
									</font><a class="link" href="server-administration.html#sysvar_optimizer_switch"><code class="literal">optimizer_switch</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">有关其他讨论，请参见
										</font>
									</font><a class="xref" href="optimization.html#derived-table-optimization" title="8.2.2.4使用合并或实现优化派生表，视图引用和公用表表达式">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第8.2.2.4节“使用合并或实现优化派生表，视图引用和公用表表达式”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;"></font><code class="literal">TEMPTABLE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">明确</font>
							<font style="vertical-align: inherit;">
								指定的一个原因</font>
							<font style="vertical-align: inherit;">是，在创建临时表之后以及在用于完成处理语句之前，可以在基础表上释放锁。</font>
							<font style="vertical-align: inherit;">这可能导致比</font>
						</font><code class="literal">MERGE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">算法</font>
							<font style="vertical-align: inherit;">更快的锁定释放，</font>
							<font style="vertical-align: inherit;">因此使用该视图的其他客户端不会被阻止。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								视图算法有</font>
						</font><code class="literal">UNDEFINED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">三个原因：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">声明中</font>
										<font style="vertical-align: inherit;">
											没有</font>
									</font><code class="literal">ALGORITHM</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">条款
										</font>
									</font><a class="link" href="sql-syntax.html#create-view" title="13.1.23创建视图语法"><code class="literal">CREATE
											VIEW</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											该</font>
									</font><a class="link" href="sql-syntax.html#create-view" title="13.1.23创建视图语法"><code class="literal">CREATE
											VIEW</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">声明有明确的</font>
									</font><code class="literal">ALGORITHM = UNDEFINED</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">条款。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">ALGORITHM = MERGE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">为只能使用临时表处理的视图指定。</font>
										<font style="vertical-align: inherit;">在这种情况下，MySQL会生成警告并将算法设置为
										</font>
									</font><code class="literal">UNDEFINED</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如前所述，</font>
						</font><code class="literal">MERGE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">通过将视图定义的相应部分合并到引用视图的语句中来处理。</font>
							<font style="vertical-align: inherit;">以下示例简要说明了</font>
						</font><code class="literal">MERGE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">算法的工作原理。</font>
							<font style="vertical-align: inherit;">这些示例假设有一个</font>
						</font><code class="literal">v_merge</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								具有此定义</font>
							<font style="vertical-align: inherit;">的视图</font>
							<font style="vertical-align: inherit;">：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE ALGORITHM = MERGE VIEW v_merge（vc1，vc2）AS</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SELECT c1，c2 FROM t WHERE c3&gt; 100;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								示例1：假设我们发出以下声明：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SELECT * FROM v_merge;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL处理语句如下：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<code class="literal">v_merge</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;"> 变 </font>
									</font><code class="literal">t</code>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">*</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">成为</font>
									</font><code class="literal">vc1, vc2</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，对应于</font>
									</font><code class="literal">c1, c2</code>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											视图</font>
									</font><code class="literal">WHERE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">子句已添加
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								生成的语句将变为：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SELECT c1，c2 FROM t WHERE c3&gt; 100;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								示例2：假设我们发出以下声明：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SELECT * FROM v_merge WHERE vc1 &lt;100;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								这种说法也同样处理前一个，只是</font>
						</font><code class="literal">vc1 &lt; 100</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">变得</font>
						</font><code class="literal">c1 &lt;
							100</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和视图</font>
						</font><code class="literal">WHERE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">子句添加到语句</font>
						</font><code class="literal">WHERE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">使用条款
							</font>
						</font><a class="link" href="functions.html#operator_and"><code class="literal">AND</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">结缔组织（并添加括号以确保条款的部分用正确的优先顺序执行）。</font>
							<font style="vertical-align: inherit;">生成的语句将变为：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SELECT c1，c2 FROM t WHERE（c3&gt; 100）AND（c1 &lt;100）;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								实际上，要执行的</font>
						</font><code class="literal">WHERE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句具有以下形式</font>
							<font style="vertical-align: inherit;">的
							</font>
							<font style="vertical-align: inherit;">子句：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">WHERE（选择WHERE）AND（查看WHERE）
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果</font>
						</font><code class="literal">MERGE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">无法使用</font>
							<font style="vertical-align: inherit;">该</font>
							<font style="vertical-align: inherit;">算法，则必须使用临时表。</font>
							<font style="vertical-align: inherit;">阻止合并的构造与阻止在派生表和公用表表达式中合并的构造相同。</font>
							<font style="vertical-align: inherit;">示例是</font>
						</font><code class="literal">SELECT
							DISTINCT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或</font>
						</font><code class="literal">LIMIT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">在子查询中。</font>
							<font style="vertical-align: inherit;">有关详细信息，请参见</font>
						</font><a class="xref" href="optimization.html#derived-table-optimization" title="8.2.2.4使用合并或实现优化派生表，视图引用和公用表表达式">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第8.2.2.4节“使用合并或实现优化派生表，视图引用和公用表表达式”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="view-updatability"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.3可更新和可插入的视图</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571333840"></a><a class="indexterm" name="idm140091571332800"></a><a class="indexterm"
					 name="idm140091571331312"></a><a class="indexterm" name="idm140091571329824"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								某些视图是可更新的，对它们的引用可用于指定要在数据更改语句中更新的表。</font>
							<font style="vertical-align: inherit;">也就是说，你可以在语句，如使用它们
							</font>
						</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，
							</font>
						</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">更新基础表的内容。</font>
							<font style="vertical-align: inherit;">派生表和公用表表达式也可以在多表</font>
						</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句中</font>
							<font style="vertical-align: inherit;">指定
							</font>
							<font style="vertical-align: inherit;">，但只能用于读取数据以指定要更新或删除的行。</font>
							<font style="vertical-align: inherit;">通常，视图引用必须是可更新的，这意味着它们可以合并而不是实现。</font>
							<font style="vertical-align: inherit;">复合视图具有更复杂的规则。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要使视图可更新，视图中的行与基础表中的行之间必须存在一对一的关系。</font>
							<font style="vertical-align: inherit;">还有一些其他构造使视图不可更新。</font>
							<font style="vertical-align: inherit;">更具体地说，如果视图包含以下任何内容，则视图不可更新：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											聚集函数或窗函数（</font>
									</font><a class="link" href="functions.html#function_sum"><code class="literal">SUM()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，
										</font>
									</font><a class="link" href="functions.html#function_min"><code class="literal">MIN()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，
										</font>
									</font><a class="link" href="functions.html#function_max"><code class="literal">MAX()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，
										</font>
									</font><a class="link" href="functions.html#function_count"><code class="literal">COUNT()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，等等）
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">DISTINCT</code>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">GROUP BY</code>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">HAVING</code>
								</p>
							</li>
							<li class="listitem">
								<p>
									<a class="link" href="sql-syntax.html#union" title="13.2.10.3 UNION语法"><code class="literal">UNION</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;"> 要么
										</font>
									</font><a class="link" href="sql-syntax.html#union" title="13.2.10.3 UNION语法"><code class="literal">UNION ALL</code></a>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											选择列表中的子查询
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											选择列表中的非依赖子查询失败
										</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，但可以
										</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，
										</font>
									</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">对于选择列表中的从属子查询，不允许使用任何数据更改语句。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											某些连接（请参阅本节后面的其他连接讨论）
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											引用</font>
									</font><code class="literal">FROM</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											子句中的
										</font>
										<font style="vertical-align: inherit;">nonupdatable视图</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											子查询的</font>
									</font><code class="literal">WHERE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">子句是指表在</font>
									</font><code class="literal">FROM</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">条款
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											仅指文字值（在这种情况下，没有要更新的基础表）
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<code class="literal">ALGORITHM = TEMPTABLE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;"> （使用临时表总是使视图不可更新）
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对基表的任何列的多次引用（失败
										</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，好的
										</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，
										</font>
									</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">）
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<a class="indexterm" name="idm140091571289552"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								视图中生成的列被视为可更新，因为可以为其分配。</font>
							<font style="vertical-align: inherit;">但是，如果明确更新此类列，则唯一允许的值为
							</font>
						</font><code class="literal">DEFAULT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">有关生成的列的信息，请参见</font>
						</font><a class="xref" href="sql-syntax.html#create-table-generated-columns" title="13.1.20.9 CREATE TABLE和Generated Columns">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第13.1.20.9节“创建表和生成的列”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								假设可以使用</font>
						</font><code class="literal">MERGE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">算法</font>
							<font style="vertical-align: inherit;">处理多表视图，有时可以更新多表视图
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">为此，视图必须使用内部联接（不是外部联接或a
							</font>
						</font><a class="link" href="sql-syntax.html#union" title="13.2.10.3 UNION语法"><code class="literal">UNION</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">）。</font>
							<font style="vertical-align: inherit;">此外，只能更新视图定义中的单个表，因此该
							</font>
						</font><code class="literal">SET</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">子句必须只列出视图中其中一个表的列。</font>
						</font><a class="link" href="sql-syntax.html#union" title="13.2.10.3 UNION语法"><code class="literal">UNION ALL</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">即使它们在理论上可以更新</font>
							<font style="vertical-align: inherit;">，</font>
							<font style="vertical-align: inherit;">也不允许</font>
							<font style="vertical-align: inherit;">使用
							</font>
							<font style="vertical-align: inherit;">它们。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								关于可插入性（可使用</font>
						</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">进行更新
							</font>
							<font style="vertical-align: inherit;">），如果可更新视图也满足视图列的这些附加要求，则可插入视图：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											必须没有重复的视图列名称。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											视图必须包含基表中没有默认值的所有列。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											视图列必须是简单的列引用。</font>
										<font style="vertical-align: inherit;">它们不能是表达式，例如：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">3.14159</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
col1 + 3</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
UPPER（COL2）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
col3 / col4</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
（</font></font><em class="replaceable"><code>subquery</code></em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">）
</font></font></pre>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL在</font>
						</font><a class="link" href="sql-syntax.html#create-view" title="13.1.23创建视图语法"><code class="literal">CREATE VIEW</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">时间</font>
							<font style="vertical-align: inherit;">设置了一个标志，称为视图可更新性标志
							</font>
							<font style="vertical-align: inherit;">。</font>
						</font><code class="literal">YES</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">如果</font>
						</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（和类似操作）对视图合法，则</font>
							<font style="vertical-align: inherit;">该标志设置为</font>
							<font style="vertical-align: inherit;">（true）
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">否则，该标志设置为
							</font>
						</font><code class="literal">NO</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">（false）。</font>
							<font style="vertical-align: inherit;">表中</font>
							<font style="vertical-align: inherit;">的</font>
						</font><code class="literal">IS_UPDATABLE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								列
							</font>
						</font><a class="link" href="information-schema.html#views-table" title="25.36 INFORMATION_SCHEMA VIEWS表"><code
							 class="literal">INFORMATION_SCHEMA.VIEWS</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">显示此标志的状态。</font>
							<font style="vertical-align: inherit;">这意味着服务器始终知道视图是否可更新。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果视图是不可更新的，这样的语句
							</font>
						</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，
							</font>
						</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">以及
							</font>
						</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">是非法的，将被拒绝。</font>
							<font style="vertical-align: inherit;">（即使视图是可更新的，也可能无法插入其中，如本节其他部分所述。）
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								视图的可更新性可能受</font>
						</font><a class="link" href="server-administration.html#sysvar_updatable_views_with_limit"><code class="literal">updatable_views_with_limit</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">系统变量</font>
							<font style="vertical-align: inherit;">值的影响
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">请参见</font>
						</font><a class="xref" href="server-administration.html#server-system-variables" title="5.1.8服务器系统变量">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第5.1.8节“服务器系统变量”</font>
							</font>
						</a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								对于以下讨论，假设存在以下表和视图：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE t1（x INTEGER）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE TABLE t2（c INTEGER）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
创建视图vmat AS SELECT SUM（x）AS s FROM t1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
创建视图vup AS SELECT * FROM t2;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE VIEW vjoin AS SELECT * FROM vmat JOIN vup on vmat.s = vup.c;</font></font><font></font>
</pre>
					<p>
						<a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，
							</font>
						</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和
							</font>
						</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句允许如下：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">语句</font>
										<font style="vertical-align: inherit;">的插入表
										</font>
										<font style="vertical-align: inherit;">可以是合并的视图引用。</font>
										<font style="vertical-align: inherit;">如果视图是连接视图，则视图的所有组件都必须是可更新的（未实现）。</font>
										<font style="vertical-align: inherit;">对于多表可更新视图，</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">如果它插入到单个表中</font>
										<font style="vertical-align: inherit;">，则
										</font>
										<font style="vertical-align: inherit;">可以工作。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											此语句无效，因为连接视图的一个组件是不可更新的：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">插入vjoin（c）VALUES（1）;
</font></font></pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											本声明有效; </font>
										<font style="vertical-align: inherit;">视图不包含实体化组件：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">插入vup（c）VALUES（1）;
</font></font></pre>
							</li>
							<li class="listitem">
								<p>
									<a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：要在</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											语句中</font>
										<font style="vertical-align: inherit;">更新的一个或多个表</font>
										<font style="vertical-align: inherit;">可能是合并的视图引用。</font>
										<font style="vertical-align: inherit;">如果视图是连接视图，则视图的至少一个组件必须是可更新的（这与之不同
										</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">）。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在多表</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											语句中，语句的更新表引用必须是基表或可更新的视图引用。</font>
										<font style="vertical-align: inherit;">非更新表引用可以是物化视图或派生表。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											本声明有效; </font>
										<font style="vertical-align: inherit;">column </font>
									</font><code class="literal">c</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">来自连接视图的可更新部分：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">更新vjoin SET c = c + 1;
</font></font></pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											该声明无效; </font>
										<font style="vertical-align: inherit;">列</font>
									</font><code class="literal">x</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">来自nonupdatable部分：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">更新vjoin SET x = x + 1;
</font></font></pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											本声明有效; </font>
										<font style="vertical-align: inherit;">多表的更新表引用</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">是可更新的视图（</font>
									</font><code class="literal">vup</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">）：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">UPDATE vup JOIN（SELECT SUM（x）AS s FROM t1）AS dt ON ...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET c = c + 1;</font></font><font></font>
</pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											该声明无效; </font>
										<font style="vertical-align: inherit;">它尝试更新具体化的派生表：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">UPDATE vup JOIN（SELECT SUM（x）AS s FROM t1）AS dt ON ...</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SET s = s + 1;</font></font><font></font>
</pre>
							</li>
							<li class="listitem">
								<p>
									<a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">：要在</font>
									</font><a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE语法"><code class="literal">DELETE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											语句中</font>
										<font style="vertical-align: inherit;">删除的一个或多个表</font>
										<font style="vertical-align: inherit;">必须是合并视图。</font>
										<font style="vertical-align: inherit;">不允许加入视图（这与</font>
									</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">和
										</font>
										<font style="vertical-align: inherit;">不同</font>
									</font><a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE语法"><code class="literal">UPDATE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">）。
										</font>
									</font>
								</p>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											此语句无效，因为视图是连接视图：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">删除vjoin WHERE ...;
</font></font></pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											此语句有效，因为视图是合并（可更新）视图：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">删除vup WHERE ...;
</font></font></pre>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											此语句有效，因为它从合并（可更新）视图中删除：
										</font>
									</font>
								</p>
								<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">删除vup FROM vup JOIN（SELECT SUM（x）AS s FROM t1）AS dt ON ...;
</font></font></pre>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								其他讨论和示例如下。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								本节中的早期讨论指出，如果并非所有列都是简单的列引用，则视图不可插入（例如，如果它包含表达式或复合表达式的列）。</font>
							<font style="vertical-align: inherit;">虽然这样的视图不可插入，但如果只更新非表达式的列，则可以更新。</font>
							<font style="vertical-align: inherit;">考虑这个观点：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE VIEW v AS SELECT col1,1 AS col2 FROM t;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								此视图不可插入，因为它</font>
						</font><code class="literal">col2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">是一个表达式。</font>
							<font style="vertical-align: inherit;">但是，如果更新没有尝试更新，则可以更新</font>
						</font><code class="literal">col2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">此更新是允许的：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">UPDATE v SET col1 = 0;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								此更新是不允许的，因为它尝试更新表达式列：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">UPDATE v SET col2 = 0;
</font></font></pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								如果表包含</font>
						</font><code class="literal">AUTO_INCREMENT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">列，则插入表中不</font>
							<font style="vertical-align: inherit;">包含</font>
							<font style="vertical-align: inherit;">列的可插入视图</font>
						</font><code class="literal">AUTO_INCREMENT</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">不会更改值
							</font>
						</font><a class="link" href="functions.html#function_last-insert-id"><code class="literal">LAST_INSERT_ID()</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，因为将默认值插入不属于视图的列的副作用不应该是可见的。
							</font>
						</font>
					</p>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="view-check-option"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.4带有检查选项的视图子句</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								的</font>
						</font><code class="literal">WITH CHECK OPTION</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">条款可以给出一个可更新视图来防止插入到行的量，
							</font>
						</font><code class="literal">WHERE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">在该条款
							</font>
						</font><em class="replaceable"><code>select_statement</code></em>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">是不正确的。</font>
							<font style="vertical-align: inherit;">它还会阻止更新</font>
						</font><code class="literal">WHERE</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								子句为true的</font>
							<font style="vertical-align: inherit;">行，</font>
							<font style="vertical-align: inherit;">但更新会导致它不为true（换句话说，它会阻止可见行更新为不可见的行）。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								在</font>
						</font><code class="literal">WITH CHECK OPTION</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">可更新视图</font>
							<font style="vertical-align: inherit;">的</font>
							<font style="vertical-align: inherit;">子句中，</font>
						</font><code class="literal">LOCAL</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和</font>
						</font><code class="literal">CASCADED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								关键字确定在根据另一个视图定义视图时检查测试的范围。</font>
							<font style="vertical-align: inherit;">如果没有给出关键字，则默认为</font>
						</font><code class="literal">CASCADED</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<code class="literal">WITH CHECK OPTION</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;"> 测试符合标准：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用</font>
									</font><code class="literal">LOCAL</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，查看view
										</font>
									</font><code class="literal">WHERE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">子句，然后检查recurses到基础视图并应用相同的规则。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用</font>
									</font><code class="literal">CASCADED</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">，查看view
										</font>
									</font><code class="literal">WHERE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">子句，然后检查recurses到底层视图，添加</font>
									</font><code class="literal">WITH CASCADED
										CHECK OPTION</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">它们（为了检查;它们的定义保持不变），并应用相同的规则。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果没有检查选项，则不检查view </font>
									</font><code class="literal">WHERE</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">子句，然后检查recurses到基础视图，并应用相同的规则。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								考虑下表和视图集的定义：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE t1（INT）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE VIEW v1 AS SELECT * FROM t1 WHERE a &lt;2</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
WITH CHECK OPTION;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE VIEW v2 AS SELECT * FROM v1 WHERE a&gt; 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
WITH LOCAL CHECK OPTION;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE VIEW v3 AS SELECT * FROM v1 WHERE a&gt; 0</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
带有级联检查选项;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								这里</font>
						</font><code class="literal">v2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">和</font>
						</font><code class="literal">v3</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">视图是根据另一个视图定义的</font>
						</font><code class="literal">v1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;"></font><code class="literal">v2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">根据其</font>
						</font><code class="literal">LOCAL</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">检查选项</font>
							<font style="vertical-align: inherit;">检查
							</font>
							<font style="vertical-align: inherit;">
								插入</font>
							<font style="vertical-align: inherit;">，然后检查递归到
							</font>
						</font><code class="literal">v1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">并再次应用规则。</font>
						</font><code class="literal">v1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">导致检查失败</font>
							<font style="vertical-align: inherit;">的规则</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">检查
							</font>
						</font><code class="literal">v3</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">也失败：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>INSERT INTO v2 VALUES (2);</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ERROR 1369（HY000）：检查选项失败'test.v2'</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
MySQL的&gt; </font></font><strong class="userinput"><code>INSERT INTO v3 VALUES (2);</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
ERROR 1369（HY000）：检查选项失败'test.v3'</font></font><font></font>
</pre>
				</div>
				<div class="section">
					<div class="titlepage">
						<div>
							<div>
								<h3 class="title"><a name="view-metadata"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">24.5.5查看元数据</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<a class="indexterm" name="idm140091571182176"></a><a class="indexterm" name="idm140091571180688"></a>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								有关视图的元数据可以获得如下：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											查询</font>
										<font style="vertical-align: inherit;">数据库</font>
									</font><a class="link" href="information-schema.html#views-table" title="25.36 INFORMATION_SCHEMA VIEWS表"><code
										 class="literal">VIEWS</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">表
										</font>
									</font><code class="literal">INFORMATION_SCHEMA</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">请参见
										</font>
									</font><a class="xref" href="information-schema.html#views-table" title="25.36 INFORMATION_SCHEMA VIEWS表">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第25.36节“INFORMATION_SCHEMA VIEWS表”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											使用该</font>
									</font><a class="link" href="sql-syntax.html#show-create-view" title="13.7.6.13 SHOW CREATE VIEW语法"><code
										 class="literal">SHOW CREATE VIEW</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											声明。</font>
										<font style="vertical-align: inherit;">请参见</font>
									</font><a class="xref" href="sql-syntax.html#show-create-view" title="13.7.6.13 SHOW CREATE VIEW语法">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">第13.7.6.13节“显示创建视图语法”</font>
										</font>
									</a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>

			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="stored-objects-security"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.6存储对象访问控制</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<a class="indexterm" name="idm140091571170832"></a><a class="indexterm" name="idm140091571169376"></a><a class="indexterm"
				 name="idm140091571168288"></a><a class="indexterm" name="idm140091571166800"></a><a class="indexterm" name="idm140091571165312"></a><a
				 class="indexterm" name="idm140091571163824"></a><a class="indexterm" name="idm140091571162752"></a><a class="indexterm"
				 name="idm140091571161264"></a>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							存储的程序（过程，函数，触发器和事件）和视图在使用之前定义，并且在引用时，在确定其特权的安全上下文中执行。</font>
						<font style="vertical-align: inherit;">这些权限由其</font>
					</font><code class="literal">DEFINER</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							属性和</font>
					</font><code class="literal">SQL SECURITY</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">特征控制。
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p><a class="xref" href="stored-objects.html#stored-objects-security-definer" title="DEFINER属性">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">DEFINER属性</font>
									</font>
								</a></p>
						</li>
						<li class="listitem">
							<p><a class="xref" href="stored-objects.html#stored-objects-security-sql-security" title="SQL安全特性">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">SQL安全特性</font>
									</font>
								</a></p>
						</li>
						<li class="listitem">
							<p><a class="xref" href="stored-objects.html#stored-objects-security-examples" title="例子">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">例子</font>
									</font>
								</a></p>
						</li>
						<li class="listitem">
							<p><a class="xref" href="stored-objects.html#stored-objects-security-guidelines" title="风险最小化指南">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">风险最小化指南</font>
									</font>
								</a></p>
						</li>
					</ul>
				</div>

				<div class="simplesect">

					<div class="titlepage">
						<div>

							<div class="simple">
								<h3 class="title"><a name="stored-objects-security-definer"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">DEFINER属性</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								所有存储的对象定义都可以包含一个</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">命名MySQL帐户</font>
							<font style="vertical-align: inherit;">的
							</font>
							<font style="vertical-align: inherit;">属性。</font>
							<font style="vertical-align: inherit;">如果定义省略了该</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">属性，则默认定义者是创建该对象的用户。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								MySQL使用以下规则来控制用户可以在对象</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">属性中</font>
							<font style="vertical-align: inherit;">指定的帐户</font>
							<font style="vertical-align: inherit;">：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果您具有</font>
									</font><a class="link" href="security.html#priv_set-user-id"><code class="literal">SET_USER_ID</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											或</font>
									</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">权限，则可以将任何帐户指定为</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">值，但如果该帐户不存在则会生成警告。</font>
										<font style="vertical-align: inherit;">此外，从MySQL 8.0.16开始，要将</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">存储对象</font>
										<font style="vertical-align: inherit;">的</font>
										<font style="vertical-align: inherit;">属性</font>
										<font style="vertical-align: inherit;">设置
										</font>
										<font style="vertical-align: inherit;">为具有该</font>
									</font><a class="link" href="security.html#priv_system-user"><code class="literal">SYSTEM_USER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">权限</font>
										<font style="vertical-align: inherit;">的帐户
										</font>
										<font style="vertical-align: inherit;">，您必须具有该</font>
									</font><a class="link" href="security.html#priv_system-user"><code class="literal">SYSTEM_USER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											权限。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											否则，只允许账户是你自己的，无论是字面规定或作为
										</font>
									</font><a class="link" href="functions.html#function_current-user"><code class="literal">CURRENT_USER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或
										</font>
									</font><a class="link" href="functions.html#function_current-user"><code class="literal">CURRENT_USER()</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">您无法将定义者设置为其他帐户。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								使用不存在的</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">帐户</font>
							<font style="vertical-align: inherit;">创建存储对象
							</font>
							<font style="vertical-align: inherit;">可能会产生负面后果：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于存储例程，如果</font>
									</font><code class="literal">SQL SECURITY</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">值为
										</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">但定义者帐户不存在，</font>
										<font style="vertical-align: inherit;">则在例程执行时发生错误</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于触发器，在帐户确实存在之前触发激活不是一个好主意。</font>
										<font style="vertical-align: inherit;">否则，未定义与权限检查有关的行为。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于事件，如果该帐户不存在，则在事件执行时发生错误。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于视图，如果</font>
									</font><code class="literal">SQL SECURITY</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">值为
										</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">但是定义者帐户不存在，</font>
										<font style="vertical-align: inherit;">则在引用视图时会发生错误</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>
				<div class="simplesect">
					<div class="titlepage">
						<div>
							<div class="simple">
								<h3 class="title"><a name="stored-objects-security-sql-security"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">SQL安全特性</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								存储例程（过程和函数）和视图的定义可以包括</font>
						</font><code class="literal">SQL SECURITY</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								具有值的特征</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><code class="literal">INVOKER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">指定对象是在定义者还是调用者上下文中执行的特征。</font>
							<font style="vertical-align: inherit;">如果定义省略了</font>
						</font><code class="literal">SQL SECURITY</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">特征，则默认为定义上下文。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								触发器和事件没有</font>
						</font><code class="literal">SQL SECURITY</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								特征，总是在definer上下文中执行。</font>
							<font style="vertical-align: inherit;">服务器根据需要自动调用这些对象，因此没有调用用户。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								定义者和调用者安全上下文的不同之处如下：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在定义安全上下文中执行的存储对象使用其</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">属性</font>
										<font style="vertical-align: inherit;">命名的帐户的权限执行
										</font>
										<font style="vertical-align: inherit;">。</font>
										<font style="vertical-align: inherit;">这些权限可能与调用用户的权限完全不同。</font>
										<font style="vertical-align: inherit;">调用者必须具有引用对象的适当权限（例如，</font>
									</font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											调用存储过程或
										</font>
									</font><a class="link" href="security.html#priv_select"><code class="literal">SELECT</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">从视图中选择），但在对象执行期间，调用者的权限将被忽略，只有</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">帐户权限才重要。</font>
										<font style="vertical-align: inherit;">如果该</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">帐户具有很少的权限，则该对象在其可以执行的操作中相应地受到限制。</font>
										<font style="vertical-align: inherit;">如果
										</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">如果帐户具有高权限（例如</font>
									</font><code class="literal">root</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">帐户），则</font><span class="emphasis"><em>
												<font style="vertical-align: inherit;">无论谁调用它</font>
											</em></span>
										<font style="vertical-align: inherit;">，该对象都可以执行强大的操作</font>
									</font><span class="emphasis"><em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">。</font>
											</font>
										</em></span>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在调用程序安全性上下文中执行的存储例程或视图只能执行调用者具有特权的操作。</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">在对象执行期间，</font>
										<font style="vertical-align: inherit;">该</font>
										<font style="vertical-align: inherit;">属性无效。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>
				<div class="simplesect">
					<div class="titlepage">
						<div>
							<div class="simple">
								<h3 class="title"><a name="stored-objects-security-examples"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">例子</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								考虑以下存储过程，声明
							</font>
						</font><code class="literal">SQL SECURITY DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">为在definer安全上下文中执行：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE DEFINER ='admin'@'localhost'PROCEDURE p1（）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SQL安全定义器</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  UPDATE t1 SET counter = counter + 1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								拥有该</font>
						</font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								权限的</font>
							<font style="vertical-align: inherit;">任何用户都</font>
						</font><code class="literal">p1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">可以使用</font>
						</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">语句</font>
							<font style="vertical-align: inherit;">调用它
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">但是，
							</font>
						</font><code class="literal">p1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">执行时，它会在definer安全上下文中执行，因此</font>
						</font><code class="literal">'admin'@'localhost'</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">将使用</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">属性中</font>
							<font style="vertical-align: inherit;">指定的帐户
							</font>
							<font style="vertical-align: inherit;">的权限执行
							</font>
							<font style="vertical-align: inherit;">。</font>
							<font style="vertical-align: inherit;">此帐户必须具有
							</font>
						</font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">的权限
							</font>
						</font><code class="literal">p1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，以及在
							</font>
						</font><a class="link" href="security.html#priv_update"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">为表特权
							</font>
						</font><code class="literal">t1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">的对象身体内引用。</font>
							<font style="vertical-align: inherit;">否则，该过程失败。
							</font>
						</font>
					</p>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								现在考虑这个存储过程，
							</font>
						</font><code class="literal">p1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">除了它的</font>
						</font><code class="literal">SQL
							SECURITY</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">特性是</font>
						</font><code class="literal">INVOKER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">：
							</font>
						</font>
					</p>
					<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE DEFINER ='admin'@'localhost'PROCEDURE p2（）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SQL安全调查员</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  UPDATE t1 SET counter = counter + 1;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
</pre>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								与</font>
							<font style="vertical-align: inherit;">调用安全上下文中的执行</font>
							<font style="vertical-align: inherit;">不同</font>
						</font><code class="literal">p1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">，</font>
						</font><code class="literal">p2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">因此无论</font>
						</font><code class="literal">DEFINER</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								属性值</font>
							<font style="vertical-align: inherit;">如何，都可以使用调用用户的特权</font>
							<font style="vertical-align: inherit;">。</font>
						</font><code class="literal">p2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">如果调用者缺少表的</font>
						</font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">特权
							</font>
						</font><code class="literal">p2</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">或
							</font>
						</font><a class="link" href="security.html#priv_update"><code class="literal">UPDATE</code></a>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">特权，则
							</font>
							<font style="vertical-align: inherit;">失败</font>
						</font><code class="literal">t1</code>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">。
							</font>
						</font>
					</p>
				</div>
				<div class="simplesect">
					<div class="titlepage">
						<div>
							<div class="simple">
								<h3 class="title"><a name="stored-objects-security-guidelines"></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">风险最小化指南</font>
									</font>
								</h3>

							</div>

						</div>

					</div>
					<p>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">
								要最大程度地降低存储对象创建和使用的潜在风险，请遵循以下准则：
							</font>
						</font>
					</p>
					<div class="itemizedlist">
						<ul class="itemizedlist" style="list-style-type: disc; ">
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											对于存储的例程或视图，</font>
									</font><code class="literal">SQL SECURITY
										INVOKER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">尽可能在对象定义中</font>
										<font style="vertical-align: inherit;">使用</font>
										<font style="vertical-align: inherit;">，以便只有具有适合对象执行的操作的权限的用户才能使用它。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											如果在使用具有</font>
									</font><a class="link" href="security.html#priv_set-user-id"><code class="literal">SET_USER_ID</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">or或
										</font>
									</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">权限</font>
										<font style="vertical-align: inherit;">的帐户时创建definer-context存储对象
										</font>
										<font style="vertical-align: inherit;">，请指定一个显式</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">属性，该属性命名仅拥有对象执行的操作所需的权限的帐户。</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">仅在绝对必要时</font>
										<font style="vertical-align: inherit;">指定高权限</font>
										<font style="vertical-align: inherit;">帐户。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											管理员可以</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">通过不授予用户</font>
									</font><a class="link" href="security.html#priv_set-user-id"><code class="literal">SET_USER_ID</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">或
										</font>
									</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">权限</font>
										<font style="vertical-align: inherit;">来阻止用户创建指定高权限</font>
										<font style="vertical-align: inherit;">帐户的
										</font>
										<font style="vertical-align: inherit;">存储对象
										</font>
										<font style="vertical-align: inherit;">。
										</font>
									</font>
								</p>
							</li>
							<li class="listitem">
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											应该写入定义者上下文对象，记住他们可能能够访问调用用户没有权限的数据。</font>
										<font style="vertical-align: inherit;">在某些情况下，您可以通过不向未授权用户授予特定权限来阻止对这些对象的引用：
										</font>
									</font>
								</p>
								<div class="itemizedlist">
									<ul class="itemizedlist" style="list-style-type: circle; ">
										<li class="listitem">
											<p>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">
														没有</font>
												</font><a class="link" href="security.html#priv_execute"><code class="literal">EXECUTE</code></a>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">
														特权</font>
													<font style="vertical-align: inherit;">的用户不能引用存储的例程</font>
													<font style="vertical-align: inherit;">。
													</font>
												</font>
											</p>
										</li>
										<li class="listitem">
											<p>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">
														没有相应权限的用户不能引用该视图（</font>
												</font><a class="link" href="security.html#priv_select"><code class="literal">SELECT</code></a>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">从中进行选择，</font>
												</font><a class="link" href="security.html#priv_insert"><code class="literal">INSERT</code></a>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">插入其中等等）。
													</font>
												</font>
											</p>
										</li>
									</ul>
								</div>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											但是，触发器和事件不存在这样的控制，因为它们总是在definer上下文中执行。</font>
										<font style="vertical-align: inherit;">服务器根据需要自动调用这些对象; </font>
										<font style="vertical-align: inherit;">用户不直接引用它们：
										</font>
									</font>
								</p>
								<div class="itemizedlist">
									<ul class="itemizedlist" style="list-style-type: circle; ">
										<li class="listitem">
											<p>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">
														触发器通过访问与之关联的表来激活，甚至是没有特殊权限的用户进行的普通表访问。
													</font>
												</font>
											</p>
										</li>
										<li class="listitem">
											<p>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">
														服务器按计划执行事件。
													</font>
												</font>
											</p>
										</li>
									</ul>
								</div>
								<p>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">
											在这两种情况下，如果</font>
									</font><code class="literal">DEFINER</code>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">帐户具有高权限，则该对象可能能够执行敏感或危险操作。</font>
										<font style="vertical-align: inherit;">如果从创建对象的用户的帐户中撤消创建对象所需的权限，则仍然如此。</font>
										<font style="vertical-align: inherit;">管理员应特别注意授予用户对象创建权限。
										</font>
									</font>
								</p>
							</li>
						</ul>
					</div>

				</div>

			</div>
			<div class="section">
				<div class="titlepage">
					<div>
						<div>
							<h2 class="title" style="clear: both"><a name="stored-programs-logging"></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">24.7存储程序二进制日志</font>
								</font>
							</h2>

						</div>

					</div>

				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							二进制日志包含有关修改数据库内容的SQL语句的信息。</font>
						<font style="vertical-align: inherit;">该信息以</font>
						<font style="vertical-align: inherit;">描述修改</font>
						<font style="vertical-align: inherit;">的</font>
					</font><span class="quote">
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">“ </font>
						</font><span class="quote">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">事件</font>
							</font>
						</span>
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;"> ”</font>
						</font>
					</span>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">的形式存储</font>
						<font style="vertical-align: inherit;">。</font>
						<font style="vertical-align: inherit;">（二进制日志事件与预定事件存储对象不同。）二进制日志有两个重要目的：
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										对于复制，二进制日志在主复制服务器上用作要发送到从属服务器的语句的记录。</font>
									<font style="vertical-align: inherit;">主服务器将其二进制日志中包含的事件发送到其从属服务器，这些服务器执行这些事件以对主服务器上的数据进行相同的更改。</font>
									<font style="vertical-align: inherit;">请参见
									</font>
								</font><a class="xref" href="replication.html#replication-implementation" title="17.2复制实施">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第17.2节“复制实现”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										某些数据恢复操作需要使用二进制日志。</font>
									<font style="vertical-align: inherit;">还原备份文件后，将重新执行备份后记录的二进制日志中的事件。</font>
									<font style="vertical-align: inherit;">这些事件使数据库从备份点更新。</font>
									<font style="vertical-align: inherit;">请参见
									</font>
								</font><a class="xref" href="backup-and-recovery.html#recovery-from-backups" title="7.3.2使用备份进行恢复">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第7.3.2节“使用备份进行恢复”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							但是，如果在语句级别进行日志记录，则存储的程序（存储过程和函数，触发器和事件）存在某些二进制日志记录问题：
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										在某些情况下，语句可能会影响主服务器和从服务器上的不同行集。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										在从属服务器上执行的复制语句由具有完全权限的从属SQL线程处理。</font>
									<font style="vertical-align: inherit;">程序可以在主服务器和从服务器上遵循不同的执行路径，因此用户可以编写包含危险语句的例程，该例程仅在从服务器上执行，并由具有完全权限的线程处理。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										如果修改数据的存储程序是不确定的，则它是不可重复的。</font>
									<font style="vertical-align: inherit;">这可能导致主站和从站上的数据不同，或导致恢复的数据与原始数据不同。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							本节介绍MySQL如何处理存储程序的二进制日志记录。</font>
						<font style="vertical-align: inherit;">它说明了实现对使用存储程序的当前条件，以及您可以采取哪些措施来避免记录日志问题。</font>
						<font style="vertical-align: inherit;">它还提供了有关这些条件的原因的其他信息。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							通常，当在SQL语句级别（基于语句的二进制日志记录）发生二进制日志记录时，会导致此处描述的问题。</font>
						<font style="vertical-align: inherit;">如果使用基于行的二进制日志记录，则日志包含由于执行SQL语句而对各个行所做的更改。</font>
						<font style="vertical-align: inherit;">执行例程或触发器时，将记录行更改，而不是进行更改的语句。</font>
						<font style="vertical-align: inherit;">对于存储过程，这意味着</font>
					</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">不记录</font>
						<font style="vertical-align: inherit;">该
						</font>
						<font style="vertical-align: inherit;">语句。</font>
						<font style="vertical-align: inherit;">对于存储的函数，将记录函数内的行更改，而不是函数调用。</font>
						<font style="vertical-align: inherit;">对于触发器，将记录触发器所做的行更改。</font>
						<font style="vertical-align: inherit;">在从属端，只能看到行更改，而不是存储的程序调用。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							混合格式二进制日志记录（</font>
					</font><a class="link" href="replication.html#sysvar_binlog_format"><code class="literal">binlog_format=MIXED</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">）使用基于语句的二进制日志记录，但只保证基于行的二进制日志记录能够产生正确结果的情况除外。</font>
						<font style="vertical-align: inherit;">对于混合格式，当存储的函数，存储过程，触发器，事件或预准备语句包含对基于语句的二进制日志记录不安全的任何内容时，整个语句将标记为不安全并以行格式记录。</font>
						<font style="vertical-align: inherit;">用于创建和删除过程，函数，触发器和事件的语句始终是安全的，并以语句格式记录。</font>
						<font style="vertical-align: inherit;">有关基于行，混合和基于语句的日志记录以及如何确定安全和不安全语句的详细信息，请参见
						</font>
					</font><a class="xref" href="replication.html#replication-formats" title="17.2.1复制格式">
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">第17.2.1节“复制格式”</font>
						</font>
					</a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							除非另有说明，否则此处的备注假定在服务器上启用了二进制日志记录（请参见
						</font>
					</font><a class="xref" href="server-administration.html#binary-log" title="5.4.4二进制日志">
						<font style="vertical-align: inherit;">
							<font style="vertical-align: inherit;">第5.4.4节“二进制日志”</font>
						</font>
					</a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">。）如果未启用二进制日志，则无法进行复制，二进制日志也不可用于数据恢复。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							在MySQL中使用存储函数的条件可以总结如下。</font>
						<font style="vertical-align: inherit;">这些条件不适用于存储过程或事件调度程序事件，除非启用了二进制日志记录，否则它们不适用。
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										要创建或更改存储的函数，</font>
									<font style="vertical-align: inherit;">除了</font>
									<font style="vertical-align: inherit;">通常需要的权限</font>
									<font style="vertical-align: inherit;">或
									</font>
									<font style="vertical-align: inherit;">权限</font>
									<font style="vertical-align: inherit;">之外</font>
									<font style="vertical-align: inherit;">，还必须具有
									</font>
								</font><a class="link" href="security.html#priv_set-user-id"><code class="literal">SET_USER_ID</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">或
									</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">权限</font>
									<font style="vertical-align: inherit;">。</font>
									<font style="vertical-align: inherit;">（取决于</font>
									<font style="vertical-align: inherit;">函数定义中</font>
									<font style="vertical-align: inherit;">的
									</font>
									<font style="vertical-align: inherit;">值，
									</font>
									<font style="vertical-align: inherit;">或者
									</font>
									<font style="vertical-align: inherit;">可能需要，无论是否启用二进制日志记录。请参见
									</font><a class="xref" href="sql-syntax.html#create-procedure" title="13.1.17创建过程和创建函数语法">
										<font style="vertical-align: inherit;">第13.1.17节“创建过程和创建函数语法”</font>
									</a>
									<font style="vertical-align: inherit;">。）
									</font>
								</font><a class="link" href="security.html#priv_create-routine"><code class="literal">CREATE ROUTINE</code></a>
								<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_alter-routine"><code
									 class="literal">ALTER ROUTINE</code></a>
								<font style="vertical-align: inherit;"></font><code class="literal">DEFINER</code>
								<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_set-user-id"><code class="literal">SET_USER_ID</code></a>
								<font style="vertical-align: inherit;"></font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;"></font><a class="xref" href="sql-syntax.html#create-procedure" title="13.1.17创建过程和创建函数语法">
									<font style="vertical-align: inherit;"></font>
								</a>
								<font style="vertical-align: inherit;"></font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										创建存储函数时，必须声明它是确定性的或不修改数据。</font>
									<font style="vertical-align: inherit;">否则，数据恢复或复制可能不安全。
									</font>
								</font>
							</p>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										默认情况下，一个</font>
								</font><a class="link" href="sql-syntax.html#create-function" title="13.1.14 CREATE FUNCTION语法"><code class="literal">CREATE
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句被接受，至少一个
									</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，</font>
								</font><code class="literal">NO SQL</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">或</font>
								</font><code class="literal">READS SQL DATA</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">必须明确指定。</font>
									<font style="vertical-align: inherit;">否则会发生错误：
									</font>
								</font>
							</p>
							<pre data-lang="none" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ERROR 1418（HY000）：此函数没有DETERMINISTIC，NO SQL，</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
或启用声明和二进制日志记录中的READS SQL DATA</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
（你*可能*想要使用安全性较低的log_bin_trust_function_creators</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
变量）</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										此功能是确定性的（并且不会修改数据），因此它是安全的：
									</font>
								</font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">创建功能f1（i INT）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
退货INT</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
确定性</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
读取SQL数据</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  回归我;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										此函数使用</font>
								</font><a class="link" href="functions.html#function_uuid"><code class="literal">UUID()</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，这不是确定性的，因此该函数也不是确定性的并且不安全：
									</font>
								</font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">创建功能f2（）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
返回CHAR（36）CHARACTER SET utf8</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  RETURN UUID（）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										此功能修改数据，因此可能不安全：
									</font>
								</font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">创建功能f3（p_id INT）</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
退货INT</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  UPDATE t SET modtime = NOW（）WHERE id = p_id;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  RETURN ROW_COUNT（）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										评估函数的性质是基于</font>
									<font style="vertical-align: inherit;">创建者</font>
									<font style="vertical-align: inherit;">的
									</font>
								</font><span class="quote">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">“ </font>
									</font><span class="quote">
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">诚实</font>
										</font>
									</span>
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;"> ”</font>
									</font>
								</span>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。</font>
									<font style="vertical-align: inherit;">MySQL不检查声明的函数</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">是否没有产生非确定性结果的语句。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										当您尝试执行存储函数时，如果
									</font>
								</font><a class="link" href="replication.html#sysvar_binlog_format"><code class="literal">binlog_format=STATEMENT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">已设置，则</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">必须在函数定义中指定关键字。</font>
									<font style="vertical-align: inherit;">如果不是这种情况，则会生成错误并且函数不会运行，除非
									</font>
								</font><a class="link" href="replication.html#sysvar_log_bin_trust_function_creators"><code class="literal">log_bin_trust_function_creators=1</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										指定覆盖此检查（参见下文）。</font>
									<font style="vertical-align: inherit;">对于递归函数调用，</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">仅在最外层调用时需要</font>
									<font style="vertical-align: inherit;">该</font>
									<font style="vertical-align: inherit;">关键字。</font>
									<font style="vertical-align: inherit;">如果正在使用基于行或混合二进制日志记录，则即使在没有</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">关键字的</font>
									<font style="vertical-align: inherit;">情况下定义函数，也会接受并复制该语句
									</font>
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										因为MySQL在创建时不检查函数是否确实是确定性的，所以使用</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">关键字</font>
									<font style="vertical-align: inherit;">调用存储函数</font>
									<font style="vertical-align: inherit;">可能会执行对基于语句的日志记录不安全的操作，或者调用包含不安全语句的函数或过程。</font>
									<font style="vertical-align: inherit;">如果在</font>
								</font><a class="link" href="replication.html#sysvar_binlog_format"><code class="literal">binlog_format=STATEMENT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										设置</font>
									<font style="vertical-align: inherit;">时发生这种情况
									</font>
									<font style="vertical-align: inherit;">，则会发出警告消息。</font>
									<font style="vertical-align: inherit;">如果正在使用基于行或混合二进制日志记录，则不会发出警告，并且将以基于行的格式复制语句。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										要放松函数创建的前述条件（必须具有</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										权限并且必须将函数声明为确定性或不修改数据），请将全局</font>
								</font><a class="link" href="replication.html#sysvar_log_bin_trust_function_creators"><code class="literal">log_bin_trust_function_creators</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										系统变量</font>
									<font style="vertical-align: inherit;">设置
									</font>
									<font style="vertical-align: inherit;">为1.默认情况下，此变量的值为0，但是你可以改变它：
									</font>
								</font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>SET GLOBAL log_bin_trust_function_creators = 1;</code></strong>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										您还</font>
								</font><a class="link" href="replication.html#option_mysqld_log-bin-trust-function-creators"><code class="option">--log-bin-trust-function-creators=1</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										可以在启动服务器时</font>
									<font style="vertical-align: inherit;">使用该</font>
									<font style="vertical-align: inherit;">选项</font>
									<font style="vertical-align: inherit;">设置此变量
									</font>
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										如果未启用二进制日志记录，
									</font>
								</font><a class="link" href="replication.html#sysvar_log_bin_trust_function_creators"><code class="literal">log_bin_trust_function_creators</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										则不适用。</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">函数创建不需要，除非如前所述，</font>
								</font><code class="literal">DEFINER</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">函数定义中</font>
									<font style="vertical-align: inherit;">的</font>
									<font style="vertical-align: inherit;">值需要它。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										有关可能对复制不安全的内置函数的信息（从而导致使用它们的存储函数也不安全），请参见
									</font>
								</font><a class="xref" href="replication.html#replication-features" title="17.4.1复制功能和问题">
									<font style="vertical-align: inherit;">
										<font style="vertical-align: inherit;">第17.4.1节“复制功能和问题”</font>
									</font>
								</a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							触发器与存储函数类似，因此前面关于函数的注释也适用于具有以下异常的触发器：</font>
					</font><a class="link" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法"><code class="literal">CREATE
							TRIGGER</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">没有可选</font>
					</font><code class="literal">DETERMINISTIC</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">特性，因此假定触发器始终是确定性的。</font>
						<font style="vertical-align: inherit;">但是，在某些情况下，这种假设可能无效。</font>
						<font style="vertical-align: inherit;">例如，该
						</font>
					</font><a class="link" href="functions.html#function_uuid"><code class="literal">UUID()</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">函数是不确定的（并且不会复制）。</font>
						<font style="vertical-align: inherit;">在触发器中使用此类功能时要小心。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							触发器可以更新表，因此</font>
					</font><a class="link" href="sql-syntax.html#create-trigger" title="13.1.22 CREATE TRIGGER语法"><code class="literal">CREATE
							TRIGGER</code></a>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">如果您没有所需的权限，</font>
						<font style="vertical-align: inherit;">则会出现类似于存储函数的错误消息</font>
						<font style="vertical-align: inherit;">。</font>
						<font style="vertical-align: inherit;">在从属端，从属设备使用trigger
						</font>
					</font><code class="literal">DEFINER</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">属性来确定哪个用户被认为是触发器的创建者。
						</font>
					</font>
				</p>
				<p>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">
							本节的其余部分提供了有关日志记录实现及其含义的其他详细信息。</font>
						<font style="vertical-align: inherit;">除非您对存储的常规使用中当前与日志记录相关的条件的基本原理感兴趣，否则无需阅读它。</font>
						<font style="vertical-align: inherit;">此讨论仅适用于基于语句的日志记录，而不适用于基于行的日志记录，但第一项除外：
						</font>
					</font><code class="literal">CREATE</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">并且</font>
					</font><code class="literal">DROP</code>
					<font style="vertical-align: inherit;">
						<font style="vertical-align: inherit;">语句将记录为语句，而不管日志记录模式如何。
						</font>
					</font>
				</p>
				<div class="itemizedlist">
					<ul class="itemizedlist" style="list-style-type: disc; ">
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										服务器写入</font>
								</font><a class="link" href="sql-syntax.html#create-event" title="13.1.13 CREATE EVENT语法"><code class="literal">CREATE
										EVENT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#create-procedure" title="13.1.17创建过程和创建函数语法"><code class="literal">CREATE
										PROCEDURE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#create-function" title="13.1.14 CREATE FUNCTION语法"><code class="literal">CREATE
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#alter-event" title="13.1.3 ALTER EVENT语法"><code class="literal">ALTER
										EVENT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#alter-procedure" title="13.1.7更改过程语法"><code class="literal">ALTER
										PROCEDURE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#alter-function" title="13.1.4 ALTER FUNCTION语法"><code class="literal">ALTER
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#drop-event" title="13.1.25 DROP EVENT语法"><code class="literal">DROP
										EVENT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，
									</font>
								</font><a class="link" href="sql-syntax.html#drop-procedure" title="13.1.29 DROP PROCEDURE和DROP FUNCTION语法"><code
									 class="literal">DROP PROCEDURE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，和
									</font>
								</font><a class="link" href="sql-syntax.html#drop-function" title="13.1.26 DROP FUNCTION语法"><code class="literal">DROP
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句二进制日志。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;"></font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code
									 class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">如果函数更改数据并且在不会记录的语句中发生，则将</font>
									<font style="vertical-align: inherit;">
										存储的函数调用记录为
									</font>
									<font style="vertical-align: inherit;">语句。</font>
									<font style="vertical-align: inherit;">这可以防止因在非记录语句中使用存储函数而导致的数据更改不重复。</font>
									<font style="vertical-align: inherit;">例如，</font>
								</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										语句不会写入二进制日志，但是
									</font>
								</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">可能会调用存储的函数进行更改。</font>
									<font style="vertical-align: inherit;">要处理此问题，</font>
									<font style="vertical-align: inherit;">当给定函数进行更改时，会将语句写入二进制日志。</font>
									<font style="vertical-align: inherit;">假设在master上执行以下语句：
									</font>
								</font><code class="literal">SELECT
									<em class="replaceable"><code>func_name</code></em>()</code>
								<font style="vertical-align: inherit;"></font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE FUNCTION f1（INT）RETURNS INT</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
开始</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  如果（a &lt;3）那么</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    插入t2值（a）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  万一;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
  返回0;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
结束;</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
CREATE TABLE t1（INT）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
插入t1值（1），（2），（3）;</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SELECT f1（a）FROM t1;</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										当</font>
								</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句执行，函数</font>
								</font><code class="literal">f1()</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">被调用三次。</font>
									<font style="vertical-align: inherit;">其中两个调用插入一行，MySQL </font>
								</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">为每个</font>
									<font style="vertical-align: inherit;">调用记录一个</font>
									<font style="vertical-align: inherit;">语句。</font>
									<font style="vertical-align: inherit;">也就是说，MySQL将以下语句写入二进制日志：
									</font>
								</font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SELECT f1（1）;</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
SELECT f1（2）;</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;"></font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code
									 class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										当函数调用导致错误的存储过程时，</font>
									<font style="vertical-align: inherit;">
										服务器还会记录</font>
									<font style="vertical-align: inherit;">存储函数调用</font>
									<font style="vertical-align: inherit;">的</font>
									<font style="vertical-align: inherit;">语句。</font>
									<font style="vertical-align: inherit;">在这种情况下，服务器将</font>
								</font><a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT语法"><code class="literal">SELECT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										语句与预期的错误代码一起</font>
									<font style="vertical-align: inherit;">写入</font>
									<font style="vertical-align: inherit;">日志。</font>
									<font style="vertical-align: inherit;">在从属设备上，如果发生相同的错误，那就是预期的结果并继续复制。</font>
									<font style="vertical-align: inherit;">否则，复制将停止。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										记录存储的函数调用而不是函数执行的语句对复制具有安全隐患，这可能源于两个因素：
									</font>
								</font>
							</p>
							<div class="itemizedlist">
								<ul class="itemizedlist" style="list-style-type: circle; ">
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													函数可以遵循主服务器和从服务器上的不同执行路径。
												</font>
											</font>
										</p>
									</li>
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													在从属服务器上执行的语句由具有完全权限的从属SQL线程处理。
												</font>
											</font>
										</p>
									</li>
								</ul>
							</div>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										这意味着虽然用户必须具有</font>
								</font><a class="link" href="security.html#priv_create-routine"><code class="literal">CREATE ROUTINE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">创建函数</font>
									<font style="vertical-align: inherit;">的
									</font>
									<font style="vertical-align: inherit;">权限，但是用户可以编写包含危险语句的函数，该函数仅在具有完全特权的线程处理它的从服务器上执行。</font>
									<font style="vertical-align: inherit;">例如，如果主服务器和从属服务器的服务器ID值分别为1和2，则主服务器上的用户可以创建和调用不安全的函数
									</font>
								</font><code class="literal">unsafe_func()</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，如下所示：
									</font>
								</font>
							</p>
							<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">mysql&gt; </font></font><strong class="userinput"><code>delimiter //</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
mysql&gt; </font></font><strong class="userinput"><code>CREATE FUNCTION unsafe_func () RETURNS INT</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt; </font></font><strong class="userinput"><code>BEGIN</code></strong><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    - &gt;    </font><font style="vertical-align: inherit;">
    - &gt;    </font><font style="vertical-align: inherit;">
    - &gt; </font><font style="vertical-align: inherit;">
    - &gt; </font><font style="vertical-align: inherit;">
mysql&gt; </font><font style="vertical-align: inherit;">
mysql&gt;</font></font><strong class="userinput"><code>IF @@server_id=2 THEN <em class="replaceable"><code>dangerous_statement</code></em>; END IF;</code></strong><font style="vertical-align: inherit;"></font><strong class="userinput"><code>RETURN 1;</code></strong><font style="vertical-align: inherit;"></font><strong class="userinput"><code>END;</code></strong><font style="vertical-align: inherit;"></font><strong class="userinput"><code>//</code></strong><font style="vertical-align: inherit;"></font><strong class="userinput"><code>delimiter ;</code></strong><font style="vertical-align: inherit;"></font><strong class="userinput"><code>INSERT INTO t VALUES(unsafe_func());</code></strong>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										该</font>
								</font><a class="link" href="sql-syntax.html#create-function" title="13.1.14 CREATE FUNCTION语法"><code class="literal">CREATE
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">和
									</font>
								</font><a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT语法"><code class="literal">INSERT</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句被写入二进制日志，以便从机将执行它们。</font>
									<font style="vertical-align: inherit;">因为从属SQL线程具有完全权限，所以它将执行危险语句。</font>
									<font style="vertical-align: inherit;">因此，函数调用对主服务器和从服务器具有不同的影响，并且不是复制安全的。
									</font>
								</font>
							</p>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										为了防止启用了二进制日志记录的服务器的这种危险</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，除了通常</font>
								</font><a class="link" href="security.html#priv_create-routine"><code class="literal">CREATE ROUTINE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										所需的权限</font>
									<font style="vertical-align: inherit;">之外</font>
									<font style="vertical-align: inherit;">，存储的函数创建者必须具有该
									</font>
									<font style="vertical-align: inherit;">特权</font>
									<font style="vertical-align: inherit;">。</font>
									<font style="vertical-align: inherit;">同样，要使用
									</font>
								</font><a class="link" href="sql-syntax.html#alter-function" title="13.1.4 ALTER FUNCTION语法"><code class="literal">ALTER
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，您必须拥有该</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">权限之外的</font>
								</font><a class="link" href="security.html#priv_alter-routine"><code class="literal">ALTER ROUTINE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">权限。</font>
									<font style="vertical-align: inherit;">没有该</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">权限，将发生错误：
									</font>
								</font>
							</p>
							<pre data-lang="none" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">错误1419（HY000）：您没有SUPER权限</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
启用二进制日志记录（您*可能*希望使用不太安全的日志</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
log_bin_trust_function_creators变量）</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										如果您不希望要求函数创建者拥有该
									</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">特权（例如，如果</font>
								</font><a class="link" href="security.html#priv_create-routine"><code class="literal">CREATE
										ROUTINE</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">您系统上</font>
									<font style="vertical-align: inherit;">具有该</font>
									<font style="vertical-align: inherit;">特权的</font>
									<font style="vertical-align: inherit;">所有用户</font>
									<font style="vertical-align: inherit;">都是有经验的应用程序开发人员），请将全局</font>
								</font><a class="link" href="replication.html#sysvar_log_bin_trust_function_creators"><code class="literal">log_bin_trust_function_creators</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										系统变量</font>
									<font style="vertical-align: inherit;">设置
									</font>
									<font style="vertical-align: inherit;">为1.您还可以使用该</font>
								</font><a class="link" href="replication.html#option_mysqld_log-bin-trust-function-creators"><code class="option">--log-bin-trust-function-creators=1</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										选项</font>
									<font style="vertical-align: inherit;">设置此变量
									</font>
									<font style="vertical-align: inherit;">启动服务器时。</font>
									<font style="vertical-align: inherit;">如果未启用二进制日志记录，
									</font>
								</font><a class="link" href="replication.html#sysvar_log_bin_trust_function_creators"><code class="literal">log_bin_trust_function_creators</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										则不适用。</font>
								</font><a class="link" href="security.html#priv_super"><code class="literal">SUPER</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">函数创建不需要，除非如前所述，</font>
								</font><code class="literal">DEFINER</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">函数定义中</font>
									<font style="vertical-align: inherit;">的</font>
									<font style="vertical-align: inherit;">值需要它。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										如果执行更新的函数是不确定的，则它不可重复。</font>
									<font style="vertical-align: inherit;">这可能会产生两种不良影响：
									</font>
								</font>
							</p>
							<div class="itemizedlist">
								<ul class="itemizedlist" style="list-style-type: circle; ">
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													它会使奴隶与主人不同。
												</font>
											</font>
										</p>
									</li>
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													恢复的数据将与原始数据不同。
												</font>
											</font>
										</p>
									</li>
								</ul>
							</div>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										为了解决这些问题，MySQL强制执行以下要求：在主服务器上，除非您声明函数是确定性的或不修改数据，否则将拒绝创建和更改函数。</font>
									<font style="vertical-align: inherit;">这里有两组功能特征：
									</font>
								</font>
							</p>
							<div class="itemizedlist">
								<ul class="itemizedlist" style="list-style-type: circle; ">
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													的</font>
											</font><code class="literal">DETERMINISTIC</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">和</font>
											</font><code class="literal">NOT
												DETERMINISTIC</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">特性指示的功能是否总是产生对于给定的输入相同的结果。</font>
												<font style="vertical-align: inherit;">默认值是，</font>
											</font><code class="literal">NOT DETERMINISTIC</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">如果没有给出特征。</font>
												<font style="vertical-align: inherit;">要声明函数是确定性的，必须</font>
											</font><code class="literal">DETERMINISTIC</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">明确</font>
												<font style="vertical-align: inherit;">指定
												</font>
												<font style="vertical-align: inherit;">。
												</font>
											</font>
										</p>
									</li>
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													的</font>
											</font><code class="literal">CONTAINS SQL</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，</font>
											</font><code class="literal">NO
												SQL</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，</font>
											</font><code class="literal">READS SQL DATA</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，和
												</font>
											</font><code class="literal">MODIFIES SQL DATA</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">特征提供有关该功能是否读取或写入数据信息。</font>
												<font style="vertical-align: inherit;">无论是</font>
											</font><code class="literal">NO SQL</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">或
												</font>
											</font><code class="literal">READS SQL DATA</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">指示功能不会改变的数据，但由于默认情况下是必须指定的这些明确的一个</font>
											</font><code class="literal">CONTAINS
												SQL</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，如果没有特性给予。
												</font>
											</font>
										</p>
									</li>
								</ul>
							</div>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										默认情况下，一个</font>
								</font><a class="link" href="sql-syntax.html#create-function" title="13.1.14 CREATE FUNCTION语法"><code class="literal">CREATE
										FUNCTION</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句被接受，至少一个
									</font>
								</font><code class="literal">DETERMINISTIC</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">，</font>
								</font><code class="literal">NO SQL</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">或</font>
								</font><code class="literal">READS SQL DATA</code>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">必须明确指定。</font>
									<font style="vertical-align: inherit;">否则会发生错误：
									</font>
								</font>
							</p>
							<pre data-lang="none" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">ERROR 1418（HY000）：此函数没有DETERMINISTIC，NO SQL，</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
或启用声明和二进制日志记录中的READS SQL DATA</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
（你*可能*想要使用安全性较低的log_bin_trust_function_creators</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
变量）</font></font><font></font>
</pre>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										如果设置
									</font>
								</font><a class="link" href="replication.html#sysvar_log_bin_trust_function_creators"><code class="literal">log_bin_trust_function_creators</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										为1，则会删除功能为确定性或不修改数据的要求。
									</font>
								</font>
							</p>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										存储过程调用记录在语句级别而不是</font>
								</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">级别。</font>
									<font style="vertical-align: inherit;">也就是说，服务器不记录
									</font>
								</font><a class="link" href="sql-syntax.html#call" title="13.2.1 CALL语法"><code class="literal">CALL</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句，它会在实际执行的过程中记录这些语句。</font>
									<font style="vertical-align: inherit;">因此，将在从属服务器上观察到主服务器上发生的相同更改。</font>
									<font style="vertical-align: inherit;">这可以防止可能由于在不同计算机上具有不同执行路径的过程而导致的问题。
									</font>
								</font>
							</p>
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">
										通常，在存储过程中执行的语句将使用与要以独立方式执行的语句相同的规则写入二进制日志。</font>
									<font style="vertical-align: inherit;">记录过程语句时需要特别注意，因为过程中的语句执行与非过程上下文中的语句执行不完全相同：
									</font>
								</font>
							</p>
							<div class="itemizedlist">
								<ul class="itemizedlist" style="list-style-type: circle; ">
									<li class="listitem">
										<p>
											<a class="indexterm" name="idm140091570898368"></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">

													要记录的语句可能包含对本地过程变量的引用。</font>
												<font style="vertical-align: inherit;">这些变量不存在于存储过程上下文之外，因此无法从字面上记录引用此类变量的语句。</font>
												<font style="vertical-align: inherit;">相反，每个对局部变量的引用都被此构造替换以用于记录目的：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">NAME_CONST（</font></font><em class="replaceable"><code>var_name</code></em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">，</font></font><em class="replaceable"><code>var_value</code></em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">）
</font></font></pre>
										<p>
											<em class="replaceable"><code>var_name</code></em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">是局部变量名称，</font>
											</font><em class="replaceable"><code>var_value</code></em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">是一个常量，指示变量在记录语句时的值。
												</font>
											</font><a class="link" href="functions.html#function_name-const"><code class="literal">NAME_CONST()</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">具有的价值
												</font>
											</font><em class="replaceable"><code>var_value</code></em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，以及
												</font>
											</font><span class="quote">
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;">“ </font>
												</font><span class="quote">
													<font style="vertical-align: inherit;">
														<font style="vertical-align: inherit;">名</font>
													</font>
												</span>
												<font style="vertical-align: inherit;">
													<font style="vertical-align: inherit;"> ”</font>
												</font>
											</span>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">的
												</font>
											</font><em class="replaceable"><code>var_name</code></em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">。</font>
												<font style="vertical-align: inherit;">因此，如果直接调用此函数，则会得到如下结果：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">MySQL的&gt; </font></font><strong class="userinput"><code>SELECT NAME_CONST('myname', 14);</code></strong><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ -------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">myname |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ -------- +</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
| </font><font style="vertical-align: inherit;">14 |</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
+ -------- +</font></font><font></font>
</pre>
										<p>
											<a class="link" href="functions.html#function_name-const"><code class="literal">NAME_CONST()</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;"> 允许在从属服务器上执行已记录的独立语句，其效果与在存储过程中在主服务器上执行的原始语句具有相同的效果。
												</font>
											</font>
										</p>
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">当源列表达式引用局部变量时，</font>
												<font style="vertical-align: inherit;">
													使用</font>
											</font><a class="link" href="functions.html#function_name-const"><code class="literal">NAME_CONST()</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">可能导致</font>
											</font><a class="link" href="sql-syntax.html#create-table" title="13.1.20 CREATE TABLE语法"><code class="literal">CREATE
													TABLE
													... SELECT</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">语句出现</font>
												<font style="vertical-align: inherit;">问题
												</font>
												<font style="vertical-align: inherit;">。</font>
												<font style="vertical-align: inherit;">将这些引用转换为</font>
											</font><a class="link" href="functions.html#function_name-const"><code class="literal">NAME_CONST()</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													表达式可能会导致主服务器和从属服务器上的列名不同，或者名称太长而不能成为合法的列标识符。</font>
												<font style="vertical-align: inherit;">解决方法是为引用局部变量的列提供别名。</font>
												<font style="vertical-align: inherit;">当</font>
											</font><code class="literal">myvar</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">值为1 </font>
												<font style="vertical-align: inherit;">时，请考虑此语句</font>
												<font style="vertical-align: inherit;">：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE t1 SELECT myvar;
</font></font></pre>
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													这将改写如下：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE t1 SELECT NAME_CONST（myvar，1）;
</font></font></pre>
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													要确保主表和从表具有相同的列名，请按以下方式编写语句：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE t1选择myvar AS myvar;
</font></font></pre>
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													重写的声明变为：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">CREATE TABLE t1 SELECT NAME_CONST（myvar，1）AS myvar;
</font></font></pre>
									</li>
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													要记录的语句可能包含对用户定义变量的引用。</font>
												<font style="vertical-align: inherit;">为了解决这个问题，MySQL将一条</font>
											</font><a class="link" href="sql-syntax.html#set-variable" title="13.7.5.1变量赋值的SET语法"><code class="literal">SET</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													语句</font>
												<font style="vertical-align: inherit;">写入
												</font>
												<font style="vertical-align: inherit;">二进制日志，以确保变量存在于从站上，其值与主站上的值相同。</font>
												<font style="vertical-align: inherit;">例如，如果语句引用变量
												</font>
											</font><code class="literal">@my_var</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，则该语句将在二进制日志中由以下语句开头，其中</font>
											</font><em class="replaceable"><code>value</code></em>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">是</font>
											</font><code class="literal">@my_var</code>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">master </font>
												<font style="vertical-align: inherit;">的值
												</font>
												<font style="vertical-align: inherit;">：
												</font>
											</font>
										</p>
										<pre data-lang="sql" class="programlisting"><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">SET @my_var = </font></font><em class="replaceable"><code>value</code></em><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">;
</font></font></pre>
									</li>
									<li class="listitem">
										<p>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													过程调用可以在已提交或回滚的事务中进行。</font>
												<font style="vertical-align: inherit;">考虑事务上下文，以便正确复制过程执行的事务方面。</font>
												<font style="vertical-align: inherit;">也就是说，服务器日志中发现实际执行和修改数据的过程中这些语句，还记录
												</font>
											</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
												 class="literal">BEGIN</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">，
												</font>
											</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
												 class="literal">COMMIT</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">和
												</font>
											</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
												 class="literal">ROLLBACK</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													语句是必要的。</font>
												<font style="vertical-align: inherit;">例如，如果过程仅更新事务表并在回滚的事务中执行，则不会记录这些更新。</font>
												<font style="vertical-align: inherit;">如果过程发生在已提交的事务中，
												</font>
											</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
												 class="literal">BEGIN</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">
													并且</font>
											</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
												 class="literal">COMMIT</code></a>
											<font style="vertical-align: inherit;">
												<font style="vertical-align: inherit;">使用更新记录语句。</font>
												<font style="vertical-align: inherit;">对于在回滚事务中执行的过程，如果语句以独立方式执行，则使用相同的规则记录其语句：
												</font>
											</font>
										</p>
										<div class="itemizedlist">
											<ul class="itemizedlist" style="list-style-type: square; ">
												<li class="listitem">
													<p>
														<font style="vertical-align: inherit;">
															<font style="vertical-align: inherit;">
																不记录事务表的更新。
															</font>
														</font>
													</p>
												</li>
												<li class="listitem">
													<p>
														<font style="vertical-align: inherit;">
															<font style="vertical-align: inherit;">
																将记录对非事务表的更新，因为回滚不会取消它们。
															</font>
														</font>
													</p>
												</li>
												<li class="listitem">
													<p>
														<font style="vertical-align: inherit;">
															<font style="vertical-align: inherit;">
																对事务和非事务表混合的更新将被记录为包围
															</font>
														</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
															 class="literal">BEGIN</code></a>
														<font style="vertical-align: inherit;">
															<font style="vertical-align: inherit;">
																，
															</font>
														</font><a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION，COMMIT和ROLLBACK语法"><code
															 class="literal">ROLLBACK</code></a>
														<font style="vertical-align: inherit;">
															<font style="vertical-align: inherit;">
																以便从服务器进行与主服务器相同的更改和回滚。
															</font>
														</font>
													</p>
												</li>
											</ul>
										</div>
									</li>
								</ul>
							</div>
						</li>
						<li class="listitem">
							<p>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">如果从存储函数中调用</font>
									<font style="vertical-align: inherit;">
										过程，则</font>
								</font><span class="emphasis"><em>
										<font style="vertical-align: inherit;">
											<font style="vertical-align: inherit;">不会</font>
										</font>
									</em></span>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">在语句级别</font>
									<font style="vertical-align: inherit;">将存储过程调用</font>
									<font style="vertical-align: inherit;">写入二进制日志。</font>
									<font style="vertical-align: inherit;">在这种情况下，唯一记录的是调用函数的语句（如果它发生在记录的语句中）或
									</font>
								</font><a class="link" href="sql-syntax.html#do" title="13.2.3 DO语法"><code class="literal">DO</code></a>
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">语句（如果它发生在未记录的语句中）。</font>
									<font style="vertical-align: inherit;">因此，在使用调用过程的存储函数时应该小心，即使该过程本身是安全的。
									</font>
								</font>
							</p>
						</li>
					</ul>
				</div>

			</div>

		</div>
		<div class="copyright-footer">

		</div>
		<div class="navfooter">
			<hr>
			<table width="100%" summary="Navigation footer">
				<tbody>
					<tr>
						<td width="40%" align="left"><a accesskey="p" href="partitioning.html">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">上一页</font>
								</font>
							</a></td>
						<td width="20%" align="center"><a accesskey="u" href="">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">向上</font>
								</font>
							</a></td>
						<td width="40%" align="right">&nbsp;<a accesskey="n" href="information-schema.html">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">下一个</font>
								</font>
							</a></td>
					</tr>
					<tr>
						<td width="40%" align="left" valign="top">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第23章分区</font>
							</font>
						</td>
						<td width="20%" align="center"><a accesskey="h" href="index.html">
								<font style="vertical-align: inherit;">
									<font style="vertical-align: inherit;">家</font>
								</font>
							</a></td>
						<td width="40%" align="right" valign="top">
							<font style="vertical-align: inherit;">
								<font style="vertical-align: inherit;">第25章INFORMATION_SCHEMA表</font>
							</font>
						</td>
					</tr>
				</tbody>
			</table>
		</div>


		<div id="goog-gt-tt" class="skiptranslate" dir="ltr">
			<div style="padding: 8px;">
				<div>
					<div class="logo"><img src="https://www.gstatic.com/images/branding/product/1x/translate_24dp.png" width="20"
						 height="20" alt="Google 翻译"></div>
				</div>
			</div>
			<div class="top" style="padding: 8px; float: left; width: 100%;">
				<h1 class="title gray">原文</h1>
			</div>
			<div class="middle" style="padding: 8px;">
				<div class="original-text"></div>
			</div>
			<div class="bottom" style="padding: 8px;">
				<div class="activity-links"><span class="activity-link">提供更好的翻译建议</span><span class="activity-link"></span></div>
				<div class="started-activity-container">
					<hr style="color: #CCC; background-color: #CCC; height: 1px; border: none;">
					<div class="activity-root"></div>
				</div>
			</div>
			<div class="status-message" style="display: none;"></div>
		</div>
		<div id="cntvlive2-is-installed"></div>
		<div class="goog-te-spinner-pos">
			<div class="goog-te-spinner-animation"><svg xmlns="http://www.w3.org/2000/svg" class="goog-te-spinner" width="96px"
				 height="96px" viewBox="0 0 66 66">
					<circle class="goog-te-spinner-path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle>
				</svg></div>
		</div>
	</body>
</html>
